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作为该方法的一个简单示例。如果您为任务设置输入,您可以使用相同的方法(如果您愿意)