1

根据http://www.gradle.org/docs/current/userguide/java_plugin.html和图 23.1,jar 任务依赖于 classes 任务。

在我的场景中,我有一个包含三个项目的多项目 - 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')

(给出弃用警告)

4

2 回答 2

2

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

在 ProjectApp1 中,添加

check {
    dependsOn ':ProjectCommon:check'
}
于 2013-03-01T10:21:16.900 回答
1

jar任务不依赖于任务,check因为它们没有语义依赖——后者不会产生任何前者消耗的东西。

如果 jar 通常依赖于检查,它不是“更安全”吗?

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

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

于 2013-03-02T08:32:12.677 回答