如何访问插件 Java 源代码中的 gradle.ext 属性?

问题描述

我需要一个属性(一)在应用插件时可用,(二)允许在 settings.gradle 文件中计算覆盖值。项目属性是理想的,因为它可以在 gradle.properties 中设置认值:

# gradle.properties
myProp=originalValue

这很棒,因为它可以用命令行参数(如 -PmyProp=newValue }} 执行(即在应用插件之前)。

例如,所有这些都在插件应用程序中保持 settings.gradle 不变:

build.gradle

我们也不能在 rootProject.myProp 中做任何魔术,因为在 // settings.gradle rootProject.getProperties.put("myProp","overrideValue") settings.ext.myProp = "overrideValue" settings.extensions.myProp = "overrideValue" gradle.startParameters.projectProperties.myProp = "overrideValue" 块之前不存在逻辑:

build.gradle

我能想到的一种解决方法是使用:

plugins

...但是在 Java 源代码(对于插件)中访问 // build.gradle plugins { id 'com.myCompany.myPlugin' version 1.0.0 // 'myProp' must be set by Now } 属性似乎不是一个方法,或者有吗?

解决方法

这似乎适用于 // settings.gradle gradle.ext.myProp = "overrideValue" 用例,但令我惊讶的是唯一可行的方法是将 Gradle 对象强制转换为 gradle.ext 对象:

gradle.ext.myProp

看起来我想做的事情应该是司空见惯的,那么有没有更好的方法,比如单独使用项目属性?

如果是这样,那么您如何更改 ExtensionAware 文件中的值?

,

这可能不是您要找的东西,但也许它仍然有帮助:您考虑过 initialization script 吗?在这样的脚本中,可以覆盖项目属性。

示例:

$ ./gradlew -PmyProp=originalValue properties | grep myProp
myProp: originalValue

$ ./gradlew -PmyProp=originalValue -I init.gradle properties | grep myProp
myProp: overrideValue

... 其中 init.gradle 如下:

allprojects {
    project.ext.myProp = 'overrideValue'
}

请注意,还有 other ways of specifying init 脚本。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...