如何在Gradle中将命令行-P参数指定的构建属性设置为真实null值?
问题原因
Gradle 命令行通过 -P 传入的项目属性默认全部为字符串类型,你传入的 null 会被直接解析为字符串 "null",不存在自动将字面量转换为 null 等特殊类型的机制。
解决方案
方法1:直接不传对应参数(最推荐)
如果你的构建逻辑是当 splainVersion 为 null 时不引入对应依赖,直接在执行命令时去掉 -PsplainVersion=null 即可,然后在构建脚本中按如下逻辑获取属性:
- Groovy DSL 写法:
// 不存在该属性时默认返回 null ext.splainVersion = project.findProperty('splainVersion')
- Kotlin DSL 写法:
// 不存在该属性时默认返回 null val splainVersion: String? = project.findProperty("splainVersion") as? String
方法2:脚本内对 "null" 字符串做转换
如果必须通过传参的方式控制值为 null,可以在构建脚本中增加判断逻辑,将传入的字符串 "null" 转为真实的 null 值:
- Groovy DSL 写法:
ext.splainVersion = project.hasProperty('splainVersion') ? project.getProperty('splainVersion') : null if (ext.splainVersion == "null") { ext.splainVersion = null }
- Kotlin DSL 写法:
var splainVersion: String? = project.findProperty("splainVersion") as? String if (splainVersion == "null") { splainVersion = null }
调整后再执行你原来的 ./gradlew publishToMavenLocal -PsplainVersion=null 命令,就能拿到真实的 null 值了。
内容的提问来源于stack exchange,提问作者tribbloid
相关产品推荐
相关产品推荐

