You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Gradle Kotlin DSL:如何访问settings.gradle.kts中定义的对象?

在Gradle 5.2 Kotlin DSL中从settings.gradle.kts获取定义的对象

在Groovy DSL里用gradle.ext的方式,在Kotlin DSL中确实有不同的实现逻辑,不过有两种可靠的方案可以解决这个问题:

方案1:将对象放入rootProject的extra(推荐)

这种方式和Groovy里的gradle.ext行为最接近,而且所有子项目都能方便地访问这些值。

在settings.gradle.kts中定义:

// 定义简单属性
rootProject.extra.apply {
    set("appVersion", "1.0.0")
    set("apiBaseUrl", "https://api.example.com")
}

// 定义自定义数据类对象
data class AppBuildConfig(
    val buildNumber: Int,
    val isDebug: Boolean
)
rootProject.extra["buildConfig"] = AppBuildConfig(42, false)

在build.gradle.kts中获取:

你可以用Kotlin的委托属性来实现类型安全的获取,避免手动强制转换:

// 获取简单属性
val appVersion: String by project.extra
val apiBaseUrl: String by project.extra

// 获取自定义对象
val buildConfig: AppBuildConfig by project.extra

// 直接使用这些值
println("当前应用版本:$appVersion")
println("API地址:$apiBaseUrl")
println("构建编号:${buildConfig.buildNumber}")

如果不需要委托,也可以直接通过get方法获取(需要手动强转):

val appVersion = project.extra["appVersion"] as String

方案2:直接使用Settings的extra属性

如果你只想在settings里定义,然后通过gradle对象访问,也可以直接给Settings的extra赋值,然后在build脚本中通过gradle.settings.extra获取:

在settings.gradle.kts中定义:

// 给Settings的extra赋值
extra["settingsSpecificValue"] = "仅在settings中定义的内容"

// 自定义对象同样适用
data class EnvConfig(val env: String)
extra["envConfig"] = EnvConfig("production")

在build.gradle.kts中获取:

// 类型安全的获取
val settingsSpecificValue: String by gradle.settings.extra
val envConfig: EnvConfig by gradle.settings.extra

// 使用示例
println("Settings中的值:$settingsSpecificValue")
println("当前环境:${envConfig.env}")

注意事项

  • Gradle 5.2的Kotlin DSL已经支持extra扩展属性,但需要注意区分Settings的extra和Project的extra,前者属于settings层面,后者属于项目层面。
  • 推荐用方案1,因为它的访问方式更统一,子项目无需额外处理就能获取rootProject里的extra值。

内容的提问来源于stack exchange,提问作者alex137

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.11 09:24:55