Gradle 多项目构建结束时的渐变任务
我正在尝试创建自己的任务,该任务将创建一个包含多项目构建期间生成的所有工件的包 目前我正确的做法是:Gradle 多项目构建结束时的渐变任务,gradle,build.gradle,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.
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."
}
但是,我只想通过运行一个命令来实现这一点,那么最好的方法是什么来做到这一点并确保保持秩序呢
理想情况下,我希望在
createPackage
任务中调用build
,或者将任务附加到build
任务中。有很多方法。一个建议是修改build
以依赖于createPackage
,以确保只调用gradlebuild
。然后,您希望增强您的任务,并告诉它的输入是什么(可能是一些其他任务的输出,如jar
)。Gradle将在运行构建时将这些任务添加到执行中,并可以根据每个任务的最新状态重新运行它们。这一点在用户指南中有记录,稍后在关于自定义任务的一章中也有记录。好的,在字里行间有一些事情需要澄清
1) PrintLN是在配置阶段而不是执行阶段运行的。有关更多信息,请参阅
2) 您没有一个“构建”任务<命令行上的code>gradle build将运行每个子项目的“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
}
“createPackage.dependsOn(build)”不是您想要的吗?按照您对非多项目项目的建议执行会导致“Creating Package…”的输出立即显示在build命令之后,而不是显示在end之后。此外,在多项目中执行此操作会导致错误。(
在根项目上找不到属性“build”
)我已尝试通过将要生成的最后一项设置为createPackage
的dependsOn
来处理多项目,但仍然没有将输出放在正确的位置。我假设println
输出是在它执行时,这不正确吗?不,这不正确,println将在配置任务时打印,而不是在执行任务时打印。要使其在任务执行时打印,使用task createPackage不会使build
依赖createPackage
导致它可能首先执行,而不是最后执行,因为要执行build
,必须先运行createPackage
任务。此外,这对于多项目构建也不太有效,因为实现java
插件的每个子项目都有多个构建。我一直在玩弄依赖,并试图让排序在多项目构建中正常工作,但从我所看到的println
显示在gradle构建
输出中的位置来看,它不起作用。顺便说一句:您的测试任务应该类似于task createPackage谢谢您的阅读关于println执行的行和清理。我对它进行了调整,使任务taskcreatepackage(dependsOn:subprojects*.build)很酷。对于3)我只是使用Zip作为该方法的一个简单示例。如果您为任务设置输入,您可以使用相同的方法(如果您愿意)