如何在Gradle中创建包含项目jar和war的分发存档(zip)

时间:2011-07-30 08:39:29

标签: gradle

我正在尝试创建一个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'].

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

在gradle中执行此操作的正确方法是什么?如何创建依赖于assemble任务的zip任务?我可以明确依赖distjar任务来war任务,但我认为这有点违反了封装。

我正在使用gradle-1.0-milestone-3。

提前致谢!

2 个答案:

答案 0 :(得分:12)

这是一个完整的例子,让你的Zip依赖于jar和战争任务:

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

答案 1 :(得分:0)

您可以执行以下操作,将所有已构建的构建存档存入您的dist zip:

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