1

http://www.gradle.org/docs/current/userguide/java_plugin.htmlと Figure 23.1 によると、jar タスクは classes タスクに依存しています。

私のシナリオでは、ProjectCommon、ProjectApp1、および ProjectApp2 の 3 つのプロジェクトを含むマルチ プロジェクトがあります。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プラグインは、特定のタスクに対してのみプロジェクトのコンパイル依存関係を使用します。チェックタスクはそれらの1つではありません。

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 に答える