从设置中获取 gradle 属性

Hyp*_*erX 3 kotlin gradle-kotlin-dsl

所以我正在尝试将我的应用程序转换为 Kotlin DSL 我面临的问题是访问 gradle.properties 就像我在 groovy 中所做的那样,我正在尝试gradle.properties从我的settings.gradle.kts文件中访问props

def propName = 'prop.name.something'
def propDisabled = Boolean.valueOf(properties[propName])
Run Code Online (Sandbox Code Playgroud)

我尝试了几种使用 settings.extra[propName].toBoolean 访问它的方法。似乎应该有更直接的方法来访问这些属性?

hot*_*key 5

访问 ingradle.properties中声明的属性的正确方法settings.gradle.kts是将其委托给settings对象:

val myProperty: String by settings
Run Code Online (Sandbox Code Playgroud)

请注意,此处必须String明确指定属性类型。

这将让房地产myPropertygradle.properties文件。请注意,如果您在pluginManagement { ... }块中使用它,那么属性声明也需要放置在 内pluginManagement { ... },因为该块在脚本中的其他所有内容之前进行评估。

但是,如果属性名称包含在 Kotlin 标识符中非法的符号,例如.,即使在反引号中也是不允许的,那么您不能将其作为委托属性访问。从 Gradle 6.7 开始,无法从 Gradle 模型访问这样的属性,但是,鉴于这gradle.properties只是一个.properties文件,您可以将其读入 JavaProperties实例:

val properties = File(rootDir, "gradle.properties").inputStream().use { 
    java.util.Properties().apply { load(it) } 
}
val propNameSomething = properties.getValue("prop.name.something") as String
Run Code Online (Sandbox Code Playgroud)

  • 实际上,我偶然发现了使用 `extra` 对象的另一个选项:`val myProperty = extra.has("myProperty").let { if (it) extra.get("myProperty") as String else null}` (2认同)