私が正しく理解していれば、Project.dependencies
スクリプトブロックとスクリプトブロックを混同していることになりますProject.buildscript.dependencies
(この質問に到達したときと同じように)。
私が見つけたものでこれに答えようとします。
すでにProject.dependencies
スクリプトブロックに精通しているはずです。このブロックでは、ソースコードに必要な依存関係を宣言します。プロジェクトに必要な依存関係を宣言する方法はいくつかあります。Gradleチュートリアル:依存関係の種類を参照してください。この問題に最も関連する部分についてのみ説明します。
compile 'org.hibernate:hibernate-core:5.0.5.Final'
モジュールの依存関係の宣言です。コンパイル構成(現在は実装構成によって非推奨になっています)は、の単なるキーワードです。Implementation only dependencies.
依存関係のタイプを説明するキーワードではありません(ここでは、タイプごとに、チュートリアルで定義されている3つのタイプ、つまりモジュールに従います。ファイル、およびプロジェクト。)
でGradleのチュートリアル:ビルドロジックを整理、それは言います:
ビルドスクリプトで外部ライブラリを使用する必要がある場合は、ビルドスクリプト自体でスクリプトのクラスパスに追加できます。これは、buildscript()メソッドを使用して行い、ビルドスクリプトのクラスパスを宣言するクロージャを渡します。
これは、たとえばJavaコンパイルクラスパスを宣言するのと同じ方法です。プロジェクトの依存関係を除き、依存関係タイプで説明されている依存関係タイプのいずれかを使用できます。
ビルドスクリプトのクラスパスを宣言すると、クラスパス上の他のクラスと同じように、ビルドスクリプトのクラスを使用できます。
私は物事が今あなたに明らかになっていることを願っています。
classpath "com.android.tools.build:gradle:${Versions.android_gradle_plugin}"
私たちが設定しているclasspath
方法をしてcom.android.tools.build:gradle:${Versions.android_gradle_plugin}
いるビルドスクリプト自体ではなく、プロジェクト内のソースで使用されているモジュールの依存関係です。
一方、compile 'org.hibernate:hibernate-core:5.0.5.Final'
コンパイル構成を使用して、プロジェクトに必要なモジュールの依存関係を宣言しています。
TL; DR: 、classpath
、compile
およびimplementation
異なる状況下での依存関係に対して使用できるすべてのキーワードがあります。前者はビルドスクリプトに依存関係を渡したいときに使用され、後者は宣言したい構成の1つです。
classpath
は有効な依存関係スコープではありません。