我正在尝试创建自己的任务,这将创建一个包含在我的多项目构建期间生成的所有工件的包。
目前我做得对的只是:
gradle build createPackage
其中输出如下:
:test-utility:compileJava UP-TO-DATE
:test-utility:processResources UP-TO-DATE
...
:test-utility:check UP-TO-DATE
:test-utility:build UP-TO-DATE
Creating Package...
Created.
BUILD SUCCESSFUL
Total time: 4.654 secs
createPackage
任务是:
task createPackage {
println "Creating Package..."
println "Created."
}
但是,我想简单地只运行一个命令,那么最好的方法是什么才能确保订单保持不变?
理想情况下,我想在build
任务中调用createPackage
或在我的任务中追加build
任务。
答案 0 :(得分:2)
好好阅读各行之间有一些事情要清理
1)您的printlns正在配置阶段运行,而不是执行阶段。有关详细信息,请参阅http://www.gradle.org/docs/current/userguide/build_lifecycle.html。
2)您没有单一的“构建”任务。命令行上的gradle build
将运行每个子项目的“构建”任务。您的包任务需要依赖于所有这些任务。像...这样的东西。
apply plugin: 'java'
evaluationDependsOnChildren()
task createPackage(type:Zip) {
dependsOn subprojects*.build
}
3)你可以用gradle更具声明性 - 只需告诉它你想要打包的内容,它就会知道它需要运行什么。例如,您可以说要从子项目中压缩所有罐子。
apply plugin: 'java'
evaluationDependsOnChildren()
task createPackage(type:Zip) {
from subprojects*.jar
}
答案 1 :(得分:0)
有很多方法。一个建议是修改build
以依赖createPackage
,以确保您只能拨打gradle build
。然后你想要增强你的任务并告诉它的输入是什么(可能是那些其他任务的输出,如jar
)。 Gradle将在您运行构建时将这些任务添加到执行中,并可以根据每个任务的最新状态重新运行它们。这在用户指南 - http://www.gradle.org/docs/current/userguide/more_about_tasks.html#sec:up_to_date_checks中以及稍后关于自定义任务的章节中进行了记录。