Gradle Zip任务做多个子树?

时间:2011-05-16 19:21:49

标签: java zip gradle

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

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-milestone-3

3 个答案:

答案 0 :(得分:22)

试试这个:

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

首先...... jar应该在zip / root中(这似乎是你想要的)。其次,通过指定from jar.outputs.files,jar任务上有一个隐式dependsOn,所以这显示了另一种完成你想要的方法。除了这种方法,如果罐子名称随时间变化,则无关紧要。如果您需要其他帮助,请与我们联系。

答案 1 :(得分:7)

显然,对答案的评论不允许以方便的方式显示更多代码...或者它不是很明显:)我有一个项目是为客户...所以我无法分享完整的项目/构建文件。这是我可以分享的内容(我将项目特定的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。将脚本从目录复制到根目录,将配置文件复制到根目录,并在名为/ lib的zip的根目录中创建目录,并将所有jar从项目/ lib复制到zip / lib。

答案 2 :(得分:0)

此答案不能直接回答问题,但我想这会对写“ Gradle插件”的人有所帮助

    final Zip zipTask = project.getTasks().create(taskName, Zip.class);
    
    final Action<? super CopySpec> cp1 = (p) -> {
        p.include("**/Install_*.xml", "**/Install.xml").into(WORKING_DIR_1);
    };
    final Action<? super CopySpec> cp2 = (p) -> {
        p.include("*Terminology*.xml").into(WORKING_DIR_2);
    };
    zipTask.from(projectDir + "/Release", cp1);
    zipTask.from(projectDir + "/Release", cp2);