使用gradle Zip任务在存档中包含单个目录

使用gradle Zip任务在存档中包含单个目录,gradle,build.gradle,Gradle,Build.gradle,我在项目的rootDir下有一个目录a。目录A有子目录B、C、D、E等 我只想创建B的归档文件,而忽略其他文件。我已经编写了一个gradle任务来压缩目录B task ZipOnlyB(type: Zip){ archiveName = "ArchiveOfB.zip" destinationDir = file ("${rootDir}/toSendToArtifactory") from "${rootDir}/A/B" } 上面的代码可以工作并创建一个名为ArchiveOfB.zip的

我在项目的rootDir下有一个目录a。目录A有子目录B、C、D、E等

我只想创建B的归档文件,而忽略其他文件。我已经编写了一个gradle任务来压缩目录B

task ZipOnlyB(type: Zip){
archiveName = "ArchiveOfB.zip"
destinationDir = file ("${rootDir}/toSendToArtifactory")

from "${rootDir}/A/B"
}
上面的代码可以工作并创建一个名为ArchiveOfB.zip的归档文件。但此存档不包含目录B。存档仅包含目录B的内容

task ZipOnlyB(type: Zip){
archiveName = "ArchiveOfB.zip"
destinationDir = file ("${rootDir}/toSendToArtifactory")

from "${rootDir}/A/B"
}
需要压缩文件的内容A/B/contents-of-directory-B

实际zip文件的内容A/contents-of-directory-B


我怎样才能得到预期的结果呢。我们高度赞赏这方面的任何指导。我查阅了Gradle Documnetion的“与fiels合作”部分,但这对我的事业没有帮助。我希望包含diretcories时使用一些“include”属性,但include仅适用于文件,没有给出目录示例。

您可以使用
方法(请参阅)来指定存档中的目标目录

在您的情况下,您可以执行以下操作:

task ZipOnlyB(type: Zip){
    archiveName = "ArchiveOfB.zip"
    destinationDir = file ("${rootDir}/toSendToArtifactory")

    from  fileTree('A/B')
    into ('A/B')
}

这将创建包含“B”目录及其内容的第一级目录“A”的存档。如果您不希望此根目录“A”而只希望目录“B”,则使用
into('B')

您可以使用
into
方法(请参阅)来指定存档中的目标目录

在您的情况下,您可以执行以下操作:

task ZipOnlyB(type: Zip){
    archiveName = "ArchiveOfB.zip"
    destinationDir = file ("${rootDir}/toSendToArtifactory")

    from  fileTree('A/B')
    into ('A/B')
}

这将创建包含“B”目录及其内容的第一级目录“A”的存档。如果您不需要此根目录“A”,而只需要目录“B”,那么使用
到('B')

您可以通过在任务定义中将
添加到('B')
中,在存档中配置目标目录。这将创建一个根级别的“B”目录。@M.Ricciuti我已经编辑了我的问题。更正了格式。使用角括号显示“目录B的内容”。但那没用。因此,删除了括号。我提供了一个工作示例,请尝试。您只需在任务定义中将
添加到('B')
中,即可在存档中配置目标目录。这将创建一个根级别的“B”目录。@M.Ricciuti我已经编辑了我的问题。更正了格式。使用角括号显示“目录B的内容”。但那没用。所以删除了括号。我提供了一个工作示例,请直接尝试我想要的答案。这解决了我的问题。非常感谢@M.Ricciuti你教了我一些无价的东西。谢谢你帮助我在Gradle变得更好。这正是我想要的。这解决了我的问题。非常感谢@M.Ricciuti你教了我一些无价的东西。谢谢你帮助我在Gradle变得更好。