buildscriptとbuild.gradleのすべてのプロジェクトの違いは何ですか?


135

マルチプロジェクトのGradleビルドで、「allprojects」セクションと「buildscript」セクションの違いは何ですか?両方にrepositoriesdependenciesタスクがあります。あるallprojects私のプロジェクトのために?どうbuildscriptですか?

buildscript {  
     repositories {
         ...
     }
     dependencies {
         ...
     }
}

そして

allprojects(subprojects) { 
     repositories {
         ...
     }
     dependencies {
         ...
     }
}

回答:


137

" buildscript"構成セクションは、gradle自体用です(つまり、gradleがビルドを実行する方法の変更)。したがって、このセクションには通常Android Gradleプラグインが含まれます。

" allprojects"セクションは、Gradleによってビルドされるモジュール用です。

通常、リポジトリセクションは両方ともjcenterから依存関係を取得するため(またはMaven Centralであるため)、両方のリポジトリセクションが同じになります。ただし、「依存関係」セクションは異なります。

各モジュールの依存関係は一意であり、各モジュール内の「build.gradle」ファイルにあるため、通常、「allprojects」の「依存関係」セクションは空です。ただし、すべてのモジュールが同じ依存関係を共有している場合は、ここにリストできます。


Gradleバージョンを指定する必要がありますか?
IgorGanapolsky

user:6998684 Gradleのバージョンはプロジェクト全体に適用され、少し非表示のファイルで宣言されます。「./gradle/wrapper/gradle-wrapper.properties」を見る
AndroidGuy

22

TL; DR:buildscriptプラグインの検索に役立ち、allprojectsすべてのプロジェクトに適用されます


https://docs.gradle.org/current/userguide/userguide_single.html#applyPluginBuildscriptは言う

外部jarファイルとして公開されたバイナリプラグインは、ビルドスクリプトのクラスパスにプラグインを追加してからプラグインを適用することで、プロジェクトに追加できます。

あなたが必要とするのでbuildscript、プラグインを見つけるために、Gradleのためとして、

Gradleのコアは意図的に、実際の自動化にはほとんど提供していません。Javaコードをコンパイルする機能などの便利な機能はすべて、プラグインによって追加されます。プラグインは、新しいタスク(JavaCompileなど)、ドメインオブジェクト(SourceSetなど)、規則(Javaソースがsrc / main / javaにあるなど)を追加し、コアオブジェクトと他のプラグインからのオブジェクトを拡張します。

についてallprojects

Project APIはallprojects、現在のプロジェクトとその下のすべてのサブプロジェクトのリストを返すプロパティを提供します。allprojectsクロージャーを使用して呼び出す場合、クロージャーのステートメントはに関連付けられたプロジェクトに委任されallprojectsます。


私にとって、Androidエコシステムの初心者として、これは何も意味しません。依存関係をどこに置く必要がありますか?その「buildscript」を削除できますか?
マーティンバーガー

@MartinBerger:依存関係を、1つ上のディレクトリではbuild.gradleなく、モジュールのに置きますbuild.gradle。これは、この質問で扱われます
serv-inc
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.