首页 > 解决方案 > 从命令行将参数传递给 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

标签: gradlegroovy

解决方案


如果您打算将属性文件用于 Gradle 属性,则不应使用自己的 local.properties 文件。

改用就好gradle.properties了。

另请注意,您不应在其配置块中声明任务代码,您需要使用doFirstor 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)
    }
}

推荐阅读