首页 > 解决方案 > 使用 gradle 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 的内容。

zip 文件 的预期内容 A/B/contents-of-directory-B

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

我该如何获得预期的结果。高度赞赏这方面的任何指导。我查看了 Gradle 文档的“使用字段”部分,但这对我的事业没有帮助。我期待一些包含目录的“包含”属性,但包含仅适用于文件并且没有给出目录示例。

标签: gradlebuild.gradle

解决方案


您可以使用into方法(请参阅https://docs.gradle.org/current/dsl/org.gradle.api.tasks.bundling.Zip.html#org.gradle.api.tasks.bundling.Zip:into(java. lang.Object) ) 指定存档内的目标目录

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

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

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

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


推荐阅读