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

标签 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
    }
}

但我无法从其他地方获得值(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

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

最佳答案

ConfigurationDependencyExtensionAware .该接口(interface)是在运行时动态添加的。 project.configurations.testCompile.each遍历已解析的文件。要遍历声明的依赖关系,请使用 project.configurations.testCompile.(all)Dependencies.all .

关于groovy - 为什么 Gradle 中的配置和依赖不是 ExtensionAware?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13914613/

相关文章:

java - 将编译时依赖项写入文件

groovy - 如何从 Groovy 设置 JIRA 票证的版本字段

delphi - 即使某个项目编译失败,如何尝试构建项目组中的所有项目

c# - .net:DLL 与 EXE 的版本号?

scala - Apache Flink Kryo 序列化程序 - ClassNotFoundException

android - 创建新项目时出现 Unresolved 依赖错误

ubuntu - Jenkins 突然显示 "wrapper script does not seem to be touching the log file"并超时并显示 FAILURE 消息

java - 从数组中删除唯一值

gradle - 使用gradle构建Zip任务,包括选定的依赖项

visual-studio-code - 如何更改 VSCode Gradle 版本?