2012-08-22 11 views
65

マルチプロジェクトgradleビルドで、誰かが "allprojects"セクションと "subprojects"セクションの違いを正確に教えてもらえますか?親ディレクトリだけ?誰もが両方を使用していますか?そうであれば、一般的にどのルールがそれぞれに置かれているかを決定する一般的なルールがありますか?allprojectsとサブプロジェクトの違い

関連の質問:(本当にallprojectsとサブプロジェクトのための)2つの構文の違いは何です:

subprojects { ... 
} 

configure(subprojects) { ... 
} 

あなた他の上の1つでしょうか?

答えて

64

マルチプロジェクトのグラデルビルドでは、rootProjectとサブプロジェクトがあります。両方の組み合わせはすべてのプロジェクトです。 rootProjectはビルドの開始場所です。一般的なパターンはrootProjectにコードはなく、サブプロジェクトはJavaプロジェクトです。その場合、あなただけのサブプロジェクトにJavaプラグインを適用します。

subprojects { 
    apply plugin: 'java' 
} 

これはただのサブモジュールを構築するのmaven集約ポンポンプロジェクトに相当します。

2つの構文については、まったく同じことをしています。最初のものはちょうど良く見えます。

+0

私はあなたの答えを理解しようとしていますが、なぜ "rootProjectにコードがありません"が欲しいのですか? –

+1

これはコードを持つことができますが、たいていの場合*単一のルートプロジェクトの下にあるすべてのサブプロジェクトを結合するだけです。 – mallaudin

+1

この男はビルドします。 –

33

オブジェクトのカスタムサブセットを構成する場合は、Ryanの答えに加えて、configureメソッドが重要になります。例えば、configure([project(":foo"), project(":bar")]) { ... }またはconfigure(tasks.matching { it.name.contains("foo") }) { ... }です。

allprojectssubprojectsを使用する場合は状況によって異なります。しばしば両方を使用します。たとえば、多くのビルドではルートプロジェクトにコードが含まれていないため、Javaプラグインのようなコード関連のプラグインは通常subprojectsに適用されます。一方、EclipseプラグインとIDEAプラグインは、通常allprojectsに適用されます。疑義がある場合は、例やその他のビルドや実験を見てください。一般的な目標は、無関係な構成を避けることです。その意味では、subprojectsallprojectsよりも良い結果が得られます。

関連する問題