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

目前我做的正确的事情就是:

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."
}

但是,我想通过仅运行一个命令来简化它,那么执行此操作并确保订单保持不变的最佳方法是什么?

理想情况下我想打电话 buildcreatePackage 任务或附加到 build 任务与我的任务。

有帮助吗?

解决方案

好的,阅读字里行间有一些事情需要澄清

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 进行更具声明性的操作 - 只需告诉它您想要打包什么,它就会找出需要运行的内容。例如,您可以说您想要压缩子项目中的所有 jar。

apply plugin: 'java'    
evaluationDependsOnChildren()
task createPackage(type:Zip) {
   from subprojects*.jar
}

其他提示

有很多方法。一个建议是修改 build 依赖 createPackage 确保你可以打电话 gradle build. 。然后你想要增强你的任务并告诉它的输入是什么(可能这些是其他一些任务的输出,例如 jar)。当您运行构建时,Gradle 会将这些任务添加到执行中,并可以根据每个任务的最新状态重新运行它们。这在用户指南中有记录 - http://www.gradle.org/docs/current/userguide/more_about_tasks.html#sec:up_to_date_checks 稍后将在有关自定义任务的章节中进行介绍。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top