【发布时间】:2021-01-15 17:17:27
【问题描述】:
如何在 gradle 任务中从命令行访问参数的值?我知道这可以通过-P 完成,但我的属性文件中有相同的属性,并且 gradle 从属性文件而不是命令行中选择参数。如何优先接受来自命令行的参数而不是属性文件?
build.gradle
Properties props = new Properties()
props.load(new FileInputStream("./local.properties"))
props.each { prop ->
project.ext.set(prop.key, prop.value)
}
task print {
println("Gets = ${remote}");
}
local.properties
remote=from_properties
来自 cmd 的命令
gradle print -Premote=from_commandline
输出
Gets = from_properties
【问题讨论】:
-
为什么不直接使用 Gradle 支持的
gradle.properties文件? -
我有来自不同环境的不同属性文件,如本地、舞台、产品等
-
你打算如何注入要加载的属性文件?在您的示例中,您对
local.properties的加载进行了硬编码,并且这样做,您违反了 Gradle 属性优先规则(请参阅 docs.gradle.org/current/userguide/build_environment.html )。也许您可以简单地实施检查以避免属性覆盖?喜欢:props.each { prop -> if (!project.hasProperty(prop.key)) project.ext.set(prop.key, prop.value) } -
@M.Ricciuti 为了简单起见,我正在对文件进行硬编码。在这里,我想要的只是找到一种方法,当参数和属性都具有相同的名称时,如何将命令行参数优先于属性文件中的属性。
-
@ParagKadam 我明白了。您是否测试过我提出的“解决方法”?