2017-11-15 24 views
0

グラッド構成には、dependenciesincomingという2つの特性があります。私の理解に基づいて、我々は次のようにGradleの依存関係のブロックを介して構成に依存関係を追加することができますGradle構成の依存関係とGradle構成の受信依存関係の違いは何ですか?

dependencies { 
    testCompile "junit:junit:4.12" 
} 

私は上記のコードブロックが実行された後、testCompile.dependenciesは少なくとも1を含むコレクションを返すことを期待しますJUnit依存関係を表すオブジェクト

ただし、testCompile.incomingは何を表しているのですか。

設定のdependenciesincomingプロパティの関係は何ですか?着信プロパティを使用する例は何ですか?

答えて

0

私はいくつかの実験でそれを理解したと思います。私は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.filesincoming.artifactsがHamcrest依存の表現を含んでいることです。これは、構成のincomingプロパティーには、構成の直接依存関係の成果物に加えて、構成の推移的な依存関係の成果物が含まれていることが示唆されています。これは、構成のtransitiveプロパティに関連しているようです。 transitiveプロパティがfalseに設定されている場合、incomingプロパティには構成の推移的な依存関係の成果物は含まれません。直接の依存関係のアーティファクトのみが含まれます。

プロパティのallDependenciesプロパティには推移的な依存関係は含まれていません。代わりに、allDependenciesプロパティには、スーパーコンフィグレーションの継承された依存関係が含まれます。

は、ここで私はこれらの構成プロパティが表す信じるもの説明するためのグラフです:

configParent -- depParent 
| 
| 
configChild -- depA 
      \- depB -- depB1 -- depB2 

configParentconfigChildが構成されています。 configParentdepParentに直接依存します。 configParentconfigChildのスーパーコンフィギュレーションです。 configChildは直接の依存関係がありますdepAdepBです。 depBdepB1に依存し、depB1depB2に依存する。

configChild.dependenciesは、depAdepBのみを含みます。 configChild.allDependenciesは、depParent,depA、およびdepBのみを含みます。 configChild.incoming.artifactsは、依存関係の成果物を含むでしょう。depParentdepAdepBdepB1、およびdepB2です。同様に、configChild.incoming.filesには、依存関係ファイルdepParent,depA,depB,depB1、およびdepB2が含まれます。

構成の受信プロパティは、スーパー構成から継承された依存関係を含め、すべての依存関係の解決であると言います。

関連する問題