根据这个页面,
http://gradle.org/docs/current/dsl/org.gradle.api.plugins.ExtensionAware.html
Gradle 中的许多领域对象都支持扩展,这意味着可以通过以下方式在其上设置扩展属性ext.key = value
,或通过其他方式
该页面说配置和依赖是扩展感知的,他们应该是,但他们不是,
我看不到。
两个证据:
首先,这个代码片段应该在依赖对象上设置一个属性
dependencies {
testCompile(group: 'junit', name: 'junit', version: '4.9') {
provided = true
ext.provided = true
}
}
但我无法从其他地方获得值(value)。
task test { task ->
task.project.configurations.testCompile.each {
println it
println it.provided
println it.ext.provided
println it.hasProperty('provided')
}
}
什么都没有出现。
虽然当我设置
provided=true
,Gradle 警告我动态属性已被弃用,请使用扩展属性,顺便说一下,动态属性似乎也不起作用。二、根据Gradle的源码,
Configuration 和 Dependency 对象不是 ExtensionAware。
https://github.com/gradle/gradle/blob/master/subprojects/core/src/main/groovy/org/gradle/api/artifacts/Dependency.java
所以我错过了一些观点吗?或者这个功能目前还没有实现。
我认为这是一个重要的特点。
最佳答案
Configuration
和 Dependency
是 ExtensionAware
.该接口(interface)是在运行时动态添加的。 project.configurations.testCompile.each
遍历已解析的文件。要遍历声明的依赖关系,请使用 project.configurations.testCompile.(all)Dependencies.all
.
关于groovy - 为什么 Gradle 中的配置和依赖不是 ExtensionAware?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13914613/