web-dev-qa-db-ja.com

Gradle:クラスパスとコンパイルの依存関係の違いは何ですか?

私のプロジェクトに依存関係を追加するとき、私はそれらにどのプレフィックスを付けるべきか決してわかりません。 "classpath"または"compile".

たとえば、以下の依存関係はコンパイル時ですかクラスパスですか?

また、これはmyapplicationsbuild.gradleまたはmodule特定のbuild.gradle?

現在のbuild.gradle(アプリケーションレベルで):

apply plugin: 'Java'

repositories {
    mavenCentral()
}

dependencies {
    compile 'org.hibernate:hibernate-core:5.0.5.Final'
    compile 'mysql:mysql-connector-Java:5.1.38'
} 
61
java123999

dependencies {}ブロック内のcompileclasspathを参照していると思います。その場合、それらは依存関係です Configurations

構成は、単に名前付きの依存関係のセットです。

compile構成は、Javaプラグインによって作成されます。 classpath構成は、build.gradle自体の依存関係を宣言する必要があるbuildSrc {}ブロックでよく見られます(おそらくプラグインの場合)。

31
Eric Wendelin

buildscript自体の実行が必要な場合は、classpathを使用します。

プロジェクトの実行が必要な場合は、compileを使用します。

buildscript{}ブロックはbuild.gradle自体用です。

マルチプロジェクトビルドの場合、最上位ビルドファイルはルートプロジェクト用であり、特定のビルドファイルはサブプロジェクト(モジュール)用です。

すべてのサブプロジェクト/モジュールに共通の構成オプションを追加できる最上位ビルドファイル。

アプリケーションの依存関係を最上位のビルドファイルに配置しないでください。それらは個々のモジュールbuild.gradleファイルに属します

30
q...

正しく理解すれば、Project.dependenciesスクリプトブロックとProject.buildscript.dependenciesスクリプトブロックを混同していることになります(この質問に到達したときのように)。

私が見つけたものでこれに答えようとします。

Project.dependenciesスクリプトブロックについて既に理解している必要があります。このブロックでは、ソースコードに必要な依存関係を宣言します。プロジェクトに必要な依存関係を宣言する方法はいくつかあります。 Gradle Tutorial:Dependency Types を参照してください。この問題に最も関連のある部分のみに言及します。

compile 'org.hibernate:hibernate-core:5.0.5.Final'はモジュールの依存関係宣言です。コンパイル構成(現在、実装構成によって非推奨になっています)は、単にImplementation only dependencies.のキーワードです。これは、依存関係のタイプを説明するキーワードではありません(ここでは、タイプごとに、チュートリアル、つまりモジュール、ファイル、プロジェクト。)

Gradle Tutorial:Organizing Build Logic と言う:

ビルドスクリプトで外部ライブラリを使用する必要がある場合は、ビルドスクリプト自体のスクリプトのクラスパスに追加できます。これを行うには、buildscript()メソッドを使用して、ビルドスクリプトクラスパスを宣言するクロージャーを渡します。

これは、たとえばJavaコンパイルクラスパスを宣言するのと同じ方法です。プロジェクトの依存関係を除き、「依存関係の種類」で説明されている任意の依存関係の種類を使用できます。

ビルドスクリプトクラスパスを宣言したら、クラスパス上の他のクラスと同様に、ビルドスクリプトでクラスを使用できます。

私は今あなたに物事がはっきりしていることを願っています。

classpath "com.Android.tools.build:gradle:${Versions.Android_gradle_plugin}"では、プロジェクトのソースではなくビルドスクリプト自体が使用するモジュール依存関係であるcom.Android.tools.build:gradle:${Versions.Android_gradle_plugin}classpath メソッドを設定しています。

一方、compile 'org.hibernate:hibernate-core:5.0.5.Final'では、compile configuration を使用してプロジェクトに必要なモジュールの依存関係を宣言しています。

tl; dr:classpathcompile、およびimplementationはすべて、さまざまな状況下の依存関係に対して使用できるキーワードです。前者は、ビルドスクリプトに依存関係を渡したい場合に使用され、後者は、宣言したい configuration のいずれかです。

8
Teng-pao Yu