私が持っています build.gradle
が私の前にあり、いくつかの依存関係がprovided
として宣言されていますが、 documentation にはこの依存関係のスコープが表示されません。
dependencies {
compile("org.springframework.boot:spring-boot-starter-web:1.2.4.RELEASE")
....
provided 'backport-util-concurrent:backport-util-concurrent:3.1'
provided 'org.javolution:javolution:5.5.1@jar
....
}
これはプラグインによって提供されますか?もしそうなら、これがどのプラグインに属しているかをどのようにして見つけますか?
Gradleのprovided
とruntime
依存関係スコープの違いは何ですか?
provided
スコープとは何ですか?
コードのコンパイルにjar
が必要であるが、jarが本番環境ライブラリコレクションに存在するとします。次に、jarをプロジェクトアーカイブと一緒にパッケージ化する必要はありません。この要件をサポートするために、Mavenにはprovided
というスコープがあります。 jarの依存関係をprovided
として宣言すると、このjarはコンパイル時にクラスパスに存在しますが、プロジェクトアーカイブにはパッケージされません。
provided
スコープは、特にWebアプリケーションで非常に役立ちます。たとえば、プロジェクトをコンパイルするには、クラスパスにservlet-api.jar
が存在する必要がありますが、servlet-api.jar
ファイルをwar
とパッケージ化するためにこれは必要ありません。 provided
スコープを使用すると、この要件を達成できます。
Gradle Java
プラグインには、provided
という名前のスコープが定義されていません。また、war
またはAndroid
プラグインにはありません。プロジェクトでprovided
スコープを使用する場合は、build.gradle
ファイルで定義する必要があります。以下は、gradleでprovided
スコープを宣言するためのコードスニペットです。
configurations {
provided
}
sourceSets {
main { compileClasspath += configurations.provided }
}
さて、あなたの2番目の質問:
Gradleで提供されている依存関係スコープとランタイム依存関係スコープの違いは何ですか?
この質問に答えるために、私はcompile
依存関係を定義します。 compile
依存関係は依存関係であり、コードをコンパイルするために必要です。ここで、コードがX
という名前のライブラリを使用する場合、X
をコンパイル時の依存関係として宣言する必要があると想像してください。また、X
が別のライブラリY
を内部で使用しており、ランタイム依存関係としてY
を宣言したとします。
コンパイル中、GradleはX
をクラスパスに追加しますが、Y
は追加しません。ですから、Y
はコンパイルには必要ありません。ただし、本番環境でプロジェクトアーカイブを実行するにはX
とY
の両方が必要であるため、X
とY
の両方をプロジェクトアーカイブにパッケージ化します。一般に、実稼働環境で必要なすべての依存関係は、runtime
依存関係として知られています。
Gradleの公式 documentation では、runtime
依存関係は「実行時にプロダクションクラスに必要な依存関係です。デフォルトでは、コンパイル時の依存関係。 "。
ここまで読んだことがあれば、provided
はcompile
依存関係であり、runtime
依存関係に含めたくない(基本的には) 、プロジェクトアーカイブと一緒にパッケージ化しないでください)。
以下は、provided
およびruntime
スコープの図です。ここで、compile
はプロジェクトのコンパイルに必要な依存関係を指し、non-compile
はプロジェクトのコンパイルに不要な依存関係を指します。
Gradle 2.12以降では、compileOnlyオプションを使用できます。
見る
https://blog.gradle.org/introducing-compile-only-dependencies
さらに明確にするために、最新バージョンでは、Gradle 5.5にはcompileOnly(提供されているものと同じ)およびruntimeOnlyオプションがあります。新しいデフォルトのコンパイルおよび実行時オプションは実装です。