排除 Gradle tar/zip 工件内的基本目录

Exclude base directory inside Gradle tar/zip artifacts

maven assembly plugin 有一个 includeBaseDirectory 选项(当设置为 false 时)避免在 tar/zip 工件中有一个与工件本身同名的顶级目录.

我想用 Gradle 获得相同的结果,但我不知道怎么做。我正在使用这样的配置:

task distTar(type: Tar) {
    compression Compression.GZIP
    extension "tar.gz"
}

我没有看到任何符合我要求的 the Tar task 选项。如何使用 Gradle 排除存档中的基本目录?

好的,我明白了。这比我想象的要简单。要将库依赖项复制到存档根目录下的 lib,我使用 CopySpec:

task distTar(type: Tar) {
    into('lib') {
        from libsDir
        include '*.jar'
    }
}

类似的 CopySpecs 可用于复制例如binconf 个目录。

通过重新配置 distribution plugin (which gets implicitly applied by the application plugin) 你可以简单地做(在​​ Kotlin DSL 中):

distributions {
    main {
        contents {
            into("/")
        }
    }
}

这会影响 TarZip 格式的输出。

(免责声明:此答案大致基于 this Gradle forum post)。