Gradle配置依赖项和Gradle配置传入依赖项之间的区别是什么?

Gradle配置依赖项和Gradle配置传入依赖项之间的区别是什么?,gradle,Gradle,渐变配置有两个属性,称为和。根据我的理解,我们可以通过Gradle依赖项块将依赖项添加到配置中,如下所示: dependencies { testCompile "junit:junit:4.12" } 我希望在执行上述代码块之后,testCompile.dependencies将返回一个集合,其中至少包含一个表示JUnit依赖关系的对象 我不确定testCompile是什么。但是,传入的将表示什么 配置的依赖项和传入属性之间的关系是什么?使用传入属性的示例是什么?我想我是通过一些实验

渐变配置有两个属性,称为和。根据我的理解,我们可以通过Gradle依赖项块将依赖项添加到配置中,如下所示:

dependencies {
    testCompile "junit:junit:4.12"
}
我希望在执行上述代码块之后,
testCompile.dependencies
将返回一个集合,其中至少包含一个表示JUnit依赖关系的对象

我不确定testCompile是什么。但是,传入的将表示什么


配置的
依赖项
传入属性
之间的关系是什么?使用传入属性的示例是什么?

我想我是通过一些实验弄明白的。我首先使用Gradle创建了一个虚拟项目。我使用下面的Gradle脚本来尝试
testCompile
配置属性的不同属性

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.artifacts.dependencies.DefaultSelfResolvingDependency_Decorated@433edba9
=======
Printing all dependencies
DefaultExternalModuleDependency{group='junit', name='junit', version='4.12', configuration='default'}
org.gradle.api.internal.artifacts.dependencies.DefaultSelfResolvingDependency_Decorated@433edba9
=======
printing incoming dependencies
DefaultExternalModuleDependency{group='junit', name='junit', version='4.12', configuration='default'}
org.gradle.api.internal.artifacts.dependencies.DefaultSelfResolvingDependency_Decorated@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依赖项的表示。这表明配置的
传入的
属性除了配置的直接依赖项的工件之外,还包括配置的可传递依赖项的工件。这似乎与配置的
可传递属性相关。如果
可传递的
属性设置为false,则
传入的
属性将不包括配置的可传递依赖项的工件;只包含直接依赖项的工件

请注意,配置的
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。所有依赖项
将仅包含
depParent
depA
depB
configChild.incoming.artifacts
将包含依赖项
depParent
depA
depB
depB1
depB2
的工件。类似地,
configChild.incoming.files
将包含依赖项
depParent
depA
depB
depB1
depB2
的文件

我总结说,配置的传入属性是其所有依赖项的解析,包括从超级配置继承的依赖项