根据http://www.gradle.org/docs/current/userguide/java_plugin.html和图23.1,jar任务取决于类任务。
在我的场景中,我有一个包含三个项目的多项目 - ProjectCommon,ProjectApp1和ProjectApp2。 ProjectApp1依赖于ProjectCommon,ProjectApp2依赖于ProjectCommon。
这是ProjectApp1和ProjectApp2的build.gradle:
dependencies {
compile project(':ProjectCommon')
}
我现在不想使用
构建ProjectApp1$ gradle :ProjectApp1:build
输出显示,例如不执行ProjectCommon的测试和检查:
:ProjectCommon:compileJava UP-TO-DATE
:ProjectCommon:processResources UP-TO-DATE
:ProjectCommon:classes UP-TO-DATE
:ProjectCommon:jar
:ProjectApp1:compileJava UP-TO-DATE
:ProjectApp1:processResources UP-TO-DATE
:ProjectApp1:classes UP-TO-DATE
:ProjectApp1:jar
:ProjectApp1:assemble
:ProjectApp1:compileTestJava UP-TO-DATE
:ProjectApp1:processTestResources UP-TO-DATE
:ProjectApp1:testClasses UP-TO-DATE
:ProjectApp1:test
:ProjectApp1:check
:ProjectApp1:build
BUILD SUCCESSFUL
Total time: 4.633 secs
ProjectApp1现在构建时不知道ProjectCommon是否真的很好......
(当然我可以做gradle:ProjectCommon:build:ProjectApp1:build而不是避免这种情况。)
如果jar通常取决于支票,那会不会“更安全”?
或者我是否对依赖项做错了,我最好在ProjectApp1和ProjectApp2的build.gradle中使用:
dependsOn(':ProjectCommon')
(提供弃用警告)
答案 0 :(得分:2)
Gradle Java插件仅对某些任务使用项目编译依赖项,检查任务不是其中之一。
在ProjectApp1中,添加
check {
dependsOn ':ProjectCommon:check'
}
答案 1 :(得分:1)
jar
任务不依赖于check
任务,因为它们没有语义依赖关系 - 后者不会产生前者消耗的任何内容。
如果罐子通常取决于检查,它不会“更安全”吗?
在某些情况下(例如Java编译)会花费时间而不会更安全,并且在其他情况下不够安全(例如,在发布相关项目时,您希望所有项目在发布任何之前测试过。使用Gradle,您可以根据特定需求定制行为。
Java插件提供buildNeeded
任务,在构建下游项目之前完全构建上游项目。以类似的方式,在下游项目中使用它们的输出之前,可以使Gradle测试上游项目。问题是这将是多么有用。