如何在Gradle中创建包含项目jar和war的发布归档文件(zip)



我正在尝试创建一个Zip任务,它将为我的项目创建一个包含项目jar文件和war(以及可能由assemble任务产生的其他构建工件)的分发包。

所以我试着写这个简单的脚本

task dist(dependsOn: 'assemble', type: Zip){
  into('lib'){
    from 'build/libs' //contains jar and war files
  }
  ... //other stuff
}

任务dist依赖于assemble,因为它方便地包含了创建jar和war文件的任务。

但是如果我尝试执行它,gradle会报错:

Circular dependency between tasks. Cycle includes [task ':assemble', task ':dist'].

我已经查看了assemble任务的规范,它清楚地写着assemble任务自动dependsOn项目中的所有存档任务,其中显然包括我的dist任务。而且似乎没有办法绕过它。

在gradle中正确的方式是什么?如何制作依赖于assemble task的zip任务?我可以让dist任务显式地依赖于jarwar任务,但我认为这有点违反封装。

我使用gradle-1.0-milestone-3.

提前感谢!

下面是一个完整的示例,说明您的Zip依赖于jar和war任务:

task dist(type:Zip){
    from jar.outputs.files
    from war.outputs.files
}

您可以执行以下操作将构建的所有已创建的归档文件获取到您的dist zip中:

task dist(type:Zip){
    tasks.withType(AbstractArchiveTask).each{ archiveTask ->
        if(archiveTask!=dist){
            from archiveTask.outputs.files
        }
    }
}

最新更新