すべてのプロジェクトとサブプロジェクトの違いは何ですか


124

マルチプロジェクトのGradleビルドで、「allprojects」セクションと「サブプロジェクト」セクションの違いは何ですか?親ディレクトリだけですか?誰かが両方を使用していますか?もしそうなら、あなたはそれぞれに通常置かれるものを決定する一般的なルールを持っていますか?

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

subprojects {  ...
}

そして

configure(subprojects) { ...
}

どちらを上に重ねればいいですか?

回答:


119

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

subprojects {
    apply plugin: 'java'
} 

これは、サブモジュールをビルドするだけのMaven集約pomプロジェクトと同等です。

2つの構文については、まったく同じことを行います。最初のものはただよく見えます。


私はあなたの答えを理解しようとしているのですが、なぜ「rootProjectにはコードがない」のが望ましいのでしょうか。
MarianPaździoch16年

6
これにはコードを含めることができますが、ほとんどの場合、すべてのサブプロジェクトを1つのルートプロジェクトの下に組み合わせるためのものです。
マラウディン

44

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

使用する場合はallprojects対をsubprojects状況に依存します。多くの場合、両方を使用します。たとえばsubprojects、多くのビルドではルートプロジェクトにコードが含まれていないため、Javaプラグインなどのコード関連プラグインは通常に適用されます。一方、EclipseおよびIDEAプラグインは、通常に適用されallprojectsます。疑問がある場合は、例やその他のビルドや実験を確認してください。一般的な目標は、無関係な構成を回避することです。その意味で、期待される結果が得られる限り、subprojectsより良いですallprojects


サブプロジェクトの一部がプロトコルバッファーに依存している場合はどうなりますか?proto-gradle-pluginをすべてに適用する必要がありますか?またはサブまたはサブのそれらのいくつかのプロジェクトにのみ?
user1870400
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.