gradle - 从命令行将参数传递给 gradle 任务
问题描述
如何从 gradle 任务中的命令行访问参数的值?我知道这可以通过-P
但我的属性文件中有相同的属性,并且 gradle 从属性文件而不是命令行中选择参数。如何优先考虑从命令行接受参数而不是属性文件?
构建.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}");
}
本地属性
remote=from_properties
来自 cmd 的命令
gradle print -Premote=from_commandline
输出
获取 = from_properties
解决方案
如果您打算将属性文件用于 Gradle 属性,则不应使用自己的 local.properties 文件。
改用就好gradle.properties
了。
另请注意,您不应在其配置块中声明任务代码,您需要使用doFirst
or doLast
:
gradle.properties
remote = properties
构建.gradle
task print {
doLast { println "Gets = ${remote}" }
}
如果你运行./gradlew print
你会看到Gets = properties
。
如果你运行./gradlew print -Premote=foo
你应该看到Gets = foo
.
也就是说......如果你真的想要自己的属性文件,你需要自己实现优先级顺序,Gradle 无法猜测你喜欢什么。
例如,您可以在设置之前检查属性是否已设置:
def props = new Properties()
props.load(new FileInputStream("./local.properties"))
props.each { key, value ->
if (!project.hasProperty(key)) {
project.ext.set(key, value)
}
}
推荐阅读
- python - 如何展平熊猫中的json字段
- docker - 没有“公共”的docker下的laravel应用程序的url如何?
- android - 运行cordova-android App时显示“等待模拟器启动...”
- php - 致命错误:未捕获的异常“Alchemy\BinaryDriver\Exception\ExecutableNotFoundException”,消息“未找到可执行文件,建议
- c# - 在 Xamarin Forms 中“重新添加”TabbedPage 子项时如何禁用 BottomNavigationView 移位模式?
- javascript - 如何在已部署的应用程序中使用 puppeteer-core 抓取动态网页?
- github - GitHub 组织过滤存储库按非归档
- java - 从java中的arraylist中消除重复值
- python-3.x - 在 python 中逐行读取二进制文件会导致 unicode 数据出现问题吗?
- android - SQLite 数据库项目在重新启动 Activity 后返回,即使它已被删除