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

如何在settings.gradle.kts声明变量并在build.gradle.kts及子模块中使用

Gradle跨脚本及IncludeBuild变量传递解决方案

一、普通单项目/子模块(非includeBuild)的变量传递问题

你之前用gradle.extra的方式错误,因为gradle.extra属于Gradle实例的额外属性,和项目层级的extra不是同一个对象。正确做法是通过项目层级的extra传递:

1. 在settings.gradle.kts中设置变量

// settings.gradle.kts
// 给根项目设置属性
rootProject.extra["platform_version"] = "0.0.10"

// 如果是多模块项目,同步给所有子项目
subprojects {
    extra["platform_version"] = rootProject.extra["platform_version"]
}

2. 在build.gradle.kts中读取变量

// build.gradle.kts
// 直接读取项目的extra属性
println(extra["platform_version"])

// 类型安全的写法(推荐)
val platformVersion: String by extra
println(platformVersion)

二、IncludeBuild子构建的变量传递

includeBuild引入的是独立构建,它们的生命周期早于主项目,无法直接通过主项目的settings传递变量。推荐以下两种可靠方案:

方案1:使用gradle.properties文件

在所有构建(主项目+included builds)能共同访问的目录下创建gradle.properties文件(比如主项目根目录),添加属性:

platform_version=0.0.10

然后在任意构建的build.gradle.kts中读取:

// 直接读取属性
println(properties["platform_version"])

// 类型安全写法
import org.gradle.kotlin.dsl.properties
val platformVersion: String by properties
println(platformVersion)

Gradle会自动加载父目录的gradle.properties,所以included build会自动读取到该属性。

方案2:命令行参数传递

执行Gradle命令时通过-P参数传递变量,所有构建(包括included builds)都能读取:

./gradlew build -Pplatform_version=0.0.10

读取方式和gradle.properties方案一致,用properties["platform_version"]或类型安全写法。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 09:13:14