間の依存関係の違い。コンパイル、apkプロジェクト、コンパイルプロジェクト、提供された、実装プロジェクト間の依存関係の差異
compile
apk project
compile project
provided project
implementation
私の質問は
あり、ここでcompile
、apk project
、compile project
、provided project
の違いは何ですか?
間の依存関係の違い。コンパイル、apkプロジェクト、コンパイルプロジェクト、提供された、実装プロジェクト間の依存関係の差異
compile
apk project
compile project
provided project
implementation
私の質問は
あり、ここでcompile
、apk project
、compile project
、provided project
の違いは何ですか?
ここでは、依存関係の設定と依存関係のソースという2つのことについて説明します。
依存関係設定が
設定が順番に発見したライブラリをあなた自身のプロジェクト/ライブラリを指定することの痛みを取り除く依存関係の推移性の定義に役立ち、自動的にそれらを含めて、必要となります。 Gradleでの構成のこの概念はMaven's scopesのものと非常に似ています
compile
:コンパイル依存関係は、プロジェクトのすべてのクラスパスで利用できます。さらに、これらの依存関係は依存するプロジェクトに伝播されます。コンパイル時の依存関係は、通常、実行時に必要です。apk
:ランタイム依存関係を定義します。このスコープの依存関係は、コンパイル時には必要ありませんが、実行のために使用されます。これは、コンパイル時に時間を節約でき、プロジェクトが実際に実行されても依存関係を維持できることを意味します。 Thisは、apk依存関係を使用する良い例です。provided
:これは、この依存関係が実行時環境で利用可能であることを意味します。結果として、このスコープはコンパイルおよびテストのクラスパスでのみ使用でき、推移的ではありません。 Androidプロジェクトではサポートされていませんが、hereのように独自の設定を定義することで回避できます。そして、そこなtestCompile
あなたは、Android上で発生する可能性がより多くの構成は、あなただけのテストのために使用されるコンパイル時の依存関係を指定することを可能にする、あるあなたがテストでのJUnitを使用したいと言います次のように行います:
testCompile 'junit:junit:4.12'
依存ソース
をあなたはあなたのために利用可能な構成を理解すれば、あなたは実際の依存関係を指定する必要があります。依存関係は内部的または外部的である可能性があります。あなたが作業している別のライブラリや公に利用可能なライブラリに依存している可能性があります。ここにはproject
キーワードが入っていますので、内部モジュールやライブラリへの依存関係を指定することができます。依存関係をcompile project
と定義すると、そのモジュールまたはライブラリがプロジェクトに推移的な依存関係として追加されます。
次の3つのモジュール(producer
、consumer
とshared
)でプロジェクトmessages
があるとし、次のように、プロジェクト構造はなります
messages/
build.gradle
settings.gradle
consumer/
build.gradle
producer/
build.gradle
shared/
build.gradle
今すぐJSON形式で、そのことの両方consumer
とproducer
ストアメッセージを想定その目的のためにgoogle-gsonを使用します。両方のプロジェクトに依存する共通ソースコードがあるとします(shared
モジュール)。 consumer
のbuild.gradleには、次の依存関係を定義することができます。
dependencies {
// Internal dependency to project shared
compile project (':shared')
// External dependency to publicly available library,
// through public repositories such as jcenter() or mavencentral()
compile 'com.google.code.gson:gson:1.7.2'
}
要約すると、それはあなたがcompile
、compile project
として依存関係を宣言することができます構成と源両方の組み合わせで、apk project
ともっと!
Gradleは* scope *ではなく* configuration *を使用します。 – RaGe
ありがとう@RaGe、あなたは正しいです。適切なグラフル語彙を使って答えを更新しました。 – unbekant