使用多项目构建在构建结束时进行Gradle任务

时间:2014-06-03 23:12:23

标签: gradle build.gradle

我正在尝试创建自己的任务,这将创建一个包含在我的多项目构建期间生成的所有工件的包。

目前我做得对的只是:

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任务。

2 个答案:

答案 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中以及稍后关于自定义任务的章节中进行了记录。