为什么Gradle中的配置和依赖不是ExtensionAware?

时间:2012-12-17 12:56:06

标签: groovy build gradle

根据这个页面, 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。

https://github.com/gradle/gradle/blob/master/subprojects/core/src/main/groovy/org/gradle/api/artifacts/Dependency.java

所以我错过了一些观点?或者到目前为止还没有实现此功能。 我认为这是一个重要的特征。

2 个答案:

答案 0 :(得分:3)

ConfigurationDependency 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