Gradle Zip任务做多个子树?

2022-09-03 00:03:18

我们正试图从多个文件系统源代码树中在Gradle中构建一个稍微复杂的Zip文件,但无论我们给出多少规范,它都会将它们放在同一个规范中。这在Gradle中可以做到吗?into

build/libs/foo.jar --> foo.jar
bar/*              --> bar/*

相反,我们得到的是:

build/libs/foo.jar --> bar/foo.jar
bar/*              --> bar/*

使用这个:

task installZip(type: Zip, dependsOn: jar) {
    from('build/libs/foo.jar').into('.')
    from('bar').into('bar')
}

任何帮助将不胜感激。

编辑:Gradle 1.0-里程碑-3


答案 1

试试这个:

task zip(type: Zip) {
    from jar.outputs.files
    from('bar/') {
        into('bar')
    }
}

第一。。。罐子应该在拉链的根/中(这似乎是你想要的)。其次,通过指定 from ,jar 任务上有一个隐式的,所以这显示了完成所需内容的另一种方法。除了使用此方法之外,如果 jar 名称随时间而变化,则无关紧要。如果您需要其他帮助,请告诉我。jar.outputs.filesdependsOn


答案 2

显然,对答案的评论将不允许以方便的方式显示更多代码...或者它不是明显的:)我有一个项目是为客户准备的...所以我不能分享完整的项目/构建文件。以下是我可以分享的内容(我将项目特定的acron更改为XXX):

task zip(type: Zip) {

    from jar.outputs.files

    from('scripts/') {
        fileMode = 0755
        include '**/runXXX.sh'
        include '**/runXXX.bat'
    }
    from('lib/') {
        include '**/*.jar'
        into('lib')
    }
    from('.') {
        include 'xxx.config'
    }

}

这将创建一个 zip,其中项目 jar 位于 zip 的根目录中。将脚本从目录复制到根目录,将配置文件复制到根目录,并在 zip 的根目录中创建一个名为 /lib 的目录,并将项目 /lib 中的所有 jar 复制到 zip/lib。


推荐