【发布时间】:2021-02-09 20:58:48
【问题描述】:
我需要一个属性(一个)在应用插件时可用,并且(两个)允许在settings.gradle 文件中计算覆盖值。项目属性将是理想的,因为它可以在gradle.properties 中设置默认值:
# gradle.properties
myProp=originalValue
这很棒,因为它可以被-PmyProp=newValue 之类的命令行参数覆盖,但我无法在build.gradle 执行之前找到覆盖settings.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 块之前不存在任何逻辑:
// build.gradle
plugins {
id 'com.myCompany.myPlugin' version 1.0.0 // 'myProp' must be set by now
}
我能想到的一种解决方法是使用:
// settings.gradle
gradle.ext.myProp = "overrideValue"
...但是在 Java 源代码(对于插件)中似乎没有访问 gradle.ext 属性的好方法,或者有吗?
【问题讨论】:
标签: gradle properties build.gradle gradle-plugin gradle.properties