gpt4 book ai didi

gradle - Gradle 配置依赖和 Gradle 配置传入依赖有什么区别?

转载 作者:行者123 更新时间:2023-12-03 04:24:56 32 4
gpt4 key购买 nike

Gradle 配置有两个属性,称为 dependenciesincoming .根据我的理解,我们可以通过 Gradle 依赖 block 向配置添加依赖,如下所示:

dependencies {
testCompile "junit:junit:4.12"
}

我希望在执行上述代码块后,testCompile.dependencies 将返回一个集合,其中至少包含 1 个表示 JUnit 依赖项的对象。

不过,我不确定 testCompile.incoming 将代表什么。

配置的dependenciesincoming 属性之间有什么关系?使用传入属性的示例是什么?

最佳答案

我想我通过一些实验弄明白了。我首先使用 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.filesincoming.artifacts 包含 Hamcrest 依赖项的表示。这表明配置的 incoming 属性除了配置的直接依赖项的工件之外还包括配置的传递依赖项的工件。这似乎与配置的 transitive 属性有关。如果 transitive 属性设置为 false,则 incoming 属性将不包含配置的传递依赖项的工件;仅包含直接依赖项的工件。

请注意,配置的 allDependencies 属性不包括传递依赖项。相反,allDependencies 属性包括从 super 配置继承的依赖项。

这是一张图表,可以帮助解释我认为这些配置属性代表的含义:

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

configParentconfigChild 是配置。 configParent 直接依赖于 depParentconfigParentconfigChild 的 super 配置。 configChild 具有直接依赖项 depAdepBdepB 依赖于 depB1depB1 依赖于 depB2

configChild.dependencies 将仅包含 depAdepBconfigChild.allDependencies 将仅包含 depParentdepAdepBconfigChild.incoming.artifacts 将包含依赖项 depParentdepAdepBdepB1depB2。同样,configChild.incoming.files 将包含依赖文件 depParentdepAdepB depB1depB2

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

关于gradle - Gradle 配置依赖和 Gradle 配置传入依赖有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47318323/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com