Gradle Java插件和多项目:为什么jar任务不依赖于检查?

时间:2013-03-01 10:13:51

标签: gradle

根据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')

(提供弃用警告)

2 个答案:

答案 0 :(得分:2)

Gradle Java插件仅对某些任务使用项目编译依赖项,检查任务不是其中之一。

在ProjectApp1中,添加

check {
    dependsOn ':ProjectCommon:check'
}

答案 1 :(得分:1)

jar任务不依赖于check任务,因为它们没有语义依赖关系 - 后者不会产生前者消耗的任何内容。

  

如果罐子通常取决于检查,它不会“更安全”吗?

在某些情况下(例如Java编译)会花费时间而不会更安全,并且在其他情况下不够安全(例如,在发布相关项目时,您希望所有项目在发布任何之前测试过。使用Gradle,您可以根据特定需求定制行为。

Java插件提供buildNeeded任务,在构建下游项目之前完全构建上游项目。以类似的方式,在下游项目中使用它们的输出之前,可以使Gradle测试上游项目。问题是这将是多么有用。