根据这个页面, 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
}
}
但我无法从其他地方获得价值。
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。
所以我错过了一些观点?或者到目前为止还没有实现此功能。 我认为这是一个重要的特征。
答案 0 :(得分:3)
Configuration
和Dependency
ExtensionAware
。接口是在运行时动态添加的。 project.configurations.testCompile.each
遍历已解析的文件。要迭代声明的依赖项,请使用project.configurations.testCompile.(all)Dependencies.all
。
答案 1 :(得分:0)
我知道这个问题真的很老了,但是我今天遇到了复制和分离的配置,这些配置不是ExtensionAware,即使我想要它们并且认为它们将基于OP问题中引用的文档。这出现在我的谷歌查询的顶部,所以我想我会分享,以防其他任何人运行这个(没有足够的代表回复彼得Niederwieser的答案)...彼得,这是一个错误(至少在文档中?)
$ cat build.gradle
apply plugin: 'base'
configurations {
ericwashere
}
task test << {
println configurations.ericwashere instanceof ExtensionAware
println configurations.ericwashere.copy() instanceof ExtensionAware
println configurations.detachedConfiguration() instanceof ExtensionAware
}
$ ./gradlew --version
------------------------------------------------------------
Gradle 2.11
------------------------------------------------------------
Build time: 2016-02-08 07:59:16 UTC
Build number: none
Revision: 584db1c7c90bdd1de1d1c4c51271c665bfcba978
Groovy: 2.4.4
Ant: Apache Ant(TM) version 1.9.3 compiled on December 23 2013
JVM: 1.8.0_31 (Oracle Corporation 25.31-b07)
OS: Windows 7 6.1 amd64
$ ./gradlew test
:test
true
false
false
BUILD SUCCESSFUL
Total time: 2.433 secs