如何在Gradle中创建包含项目JAR和war的分发存档(zip)
我正在尝试创建一个Zip任务,该任务将为我的项目创建一个分发包,其中包含项目jar文件和war(以及由如何在Gradle中创建包含项目JAR和war的分发存档(zip),gradle,Gradle,我正在尝试创建一个Zip任务,该任务将为我的项目创建一个分发包,其中包含项目jar文件和war(以及由assemble任务生成的其他构建工件) 所以我试着写这个简单的脚本 task dist(dependsOn: 'assemble', type: Zip){ into('lib'){ from 'build/libs' //contains jar and war files } ... //other stuff } 任务dist依赖于assembly,因为它方便地包含
assemble
任务生成的其他构建工件)
所以我试着写这个简单的脚本
task dist(dependsOn: 'assemble', type: Zip){
into('lib'){
from 'build/libs' //contains jar and war files
}
... //other stuff
}
任务dist
依赖于assembly
,因为它方便地包含了创建jar和war文件的任务
但如果我尝试执行此操作,gradle会抱怨此错误消息:
Circular dependency between tasks. Cycle includes [task ':assemble', task ':dist'].
我已经签出了,上面清楚地写着,assembly
任务自动dependsOn
项目中的所有归档任务,其中显然包括我的dist
任务。而且似乎没有办法绕过它
在gradle这样做的正确方式是什么?如何创建依赖于assembly
任务的zip任务?我可以使dist
任务显式地依赖于jar
和war
任务,但我认为这有点违反了封装
我正在使用gradle-1.0-milestone-3
提前谢谢 您可以执行以下操作,将生成的所有已创建归档文件放入您的dist zip中:
task dist(type:Zip){
tasks.withType(AbstractArchiveTask).each{ archiveTask ->
if(archiveTask!=dist){
from archiveTask.outputs.files
}
}
}
下面是一个完整的示例,它可以让您的Zip依赖于jar和war任务:
task dist(type:Zip){
from jar.outputs.files
from war.outputs.files
}
好主意,但相当冗长。如果我有另一个类似的
dist2
任务,它也会中断。你能解释一下第二个dist2任务会中断什么吗?if子句只是为了避免循环。我的意思是,如果我有另一个分发任务(dist2
),它的输出文件将包含在dist
中,而我只需要assemble
的输出(即jar
和war
)。事实上,archiveTask.outputs.files的内容对我来说并不重要。我只想确保jar
和war
任务在dist
task之前执行。在这种情况下,您应该将上面的示例用于任务。withType(jar)
作为war从jar继承的。谢谢。看起来不错,但它不也包括我zip中所有Jar任务的内容吗?(我回家后再试试)。最初我想要的是制作一个分发包,其中只包含jar
和war
任务的输出。您的解决方案现在应该可以做到这一点,但是如果我以后添加一些辅助jar任务,它们可能会出现在我的zip中。对不起,我以为您指的是jar和War类型的所有任务。我重构了上面的示例以满足您的需要。我希望我们更接近一个合适的解决方案:-)