私はいくつかの実験でそれを理解したと思います。私はGradleを使ってダミープロジェクトを作成しました。私はtestCompile
構成のプロパティのさまざまなプロパティを試してみるために以下のGradleスクリプトを持っています。
group 'com.example'
version '1.0-SNAPSHOT'
apply plugin: 'java'
sourceCompatibility = 1.8
repositories {
mavenCentral()
}
task("dummyFileGenerator") {
outputs.file '/tmp'
}
// configurations.testCompile.transitive false
dependencies {
testCompile group: 'junit', name: 'junit', version: '4.12'
testCompile files('/tmp')
}
println "Printing dependencies"
configurations.testCompile.dependencies.all {
println(it)
}
println "======="
println "Printing all dependencies"
configurations.testCompile.allDependencies.all {
println it
}
println '======='
println "printing incoming dependencies"
configurations.testCompile.incoming.dependencies.all {
println(it)
}
println "======="
println "printing files of incoming dependencies"
configurations.testCompile.incoming.files.forEach {
println it
}
println "======="
println "printing artifacts of incoming dependencies"
configurations.testCompile.incoming.artifacts.forEach {
println it
}
println "======="
println "printing files of incoming dependencies (again)"
configurations.testCompile.incoming.files.forEach {
println it
}
println "======="
task("blecgh") {
doLast {
println "Hello!"
}
}
このスクリプトの出力例である:注意する
Printing dependencies
DefaultExternalModuleDependency{group='junit', name='junit', version='4.12', configuration='default'}
org.gradle.api.internal.[email protected]433edba9
=======
Printing all dependencies
DefaultExternalModuleDependency{group='junit', name='junit', version='4.12', configuration='default'}
org.gradle.api.internal.[email protected]433edba9
=======
printing incoming dependencies
DefaultExternalModuleDependency{group='junit', name='junit', version='4.12', configuration='default'}
org.gradle.api.internal.[email protected]433edba9
=======
printing files of incoming dependencies
/tmp
/usr/local/google/home/afwang/.gradle/caches/modules-2/files-2.1/junit/junit/4.12/2973d150c0dc1fefe998f834810d68f278ea58ec/junit-4.12.jar
/usr/local/google/home/afwang/.gradle/caches/modules-2/files-2.1/org.hamcrest/hamcrest-core/1.3/42a25dc3219429f0e5d060061f71acb49bf010a0/hamcrest-core-1.3.jar
=======
printing artifacts of incoming dependencies
tmp
junit.jar (junit:junit:4.12)
hamcrest-core.jar (org.hamcrest:hamcrest-core:1.3)
=======
printing files of incoming dependencies (again)
/tmp
/usr/local/google/home/afwang/.gradle/caches/modules-2/files-2.1/junit/junit/4.12/2973d150c0dc1fefe998f834810d68f278ea58ec/junit-4.12.jar
/usr/local/google/home/afwang/.gradle/caches/modules-2/files-2.1/org.hamcrest/hamcrest-core/1.3/42a25dc3219429f0e5d060061f71acb49bf010a0/hamcrest-core-1.3.jar
=======
:blecgh
Hello!
BUILD SUCCESSFUL
Total time: 0.621 secs
興味深いビットがincoming.files
とincoming.artifacts
がHamcrest依存の表現を含んでいることです。これは、構成のincoming
プロパティーには、構成の直接依存関係の成果物に加えて、構成の推移的な依存関係の成果物が含まれていることが示唆されています。これは、構成のtransitive
プロパティに関連しているようです。 transitive
プロパティがfalseに設定されている場合、incoming
プロパティには構成の推移的な依存関係の成果物は含まれません。直接の依存関係のアーティファクトのみが含まれます。
プロパティのallDependencies
プロパティには推移的な依存関係は含まれていません。代わりに、allDependencies
プロパティには、スーパーコンフィグレーションの継承された依存関係が含まれます。
は、ここで私はこれらの構成プロパティが表す信じるもの説明するためのグラフです:
configParent -- depParent
|
|
configChild -- depA
\- depB -- depB1 -- depB2
configParent
とconfigChild
が構成されています。 configParent
はdepParent
に直接依存します。 configParent
はconfigChild
のスーパーコンフィギュレーションです。 configChild
は直接の依存関係がありますdepA
とdepB
です。 depB
はdepB1
に依存し、depB1
はdepB2
に依存する。
configChild.dependencies
は、depA
とdepB
のみを含みます。 configChild.allDependencies
は、depParent
,depA
、およびdepB
のみを含みます。 configChild.incoming.artifacts
は、依存関係の成果物を含むでしょう。depParent
、depA
、depB
、depB1
、およびdepB2
です。同様に、configChild.incoming.files
には、依存関係ファイルdepParent
,depA
,depB
,depB1
、およびdepB2
が含まれます。
構成の受信プロパティは、スーパー構成から継承された依存関係を含め、すべての依存関係の解決であると言います。