gradle - 如何解析Gradle任务参数

标签 gradle groovy arguments task

我有一个任务,需要接受以特定前缀开头的所有参数。
我有这个 :

def props = project.properties.findAll ({k,v -> k.startsWith("test_")}).collectEntries ({k,v -> [k - "test_", v]})
task name(){
doLast{
 props.each {k,v -> project.ext.setProperty(k,v)}

}
}

我想在命令行中运行它;
./gradlew name -Ptest_foo=bar.

我正在使用'test_foo'值覆盖代码中的默认值,但是它无法按预期方式工作。它正在返回默认值,并且未考虑命令行参数。
请任何帮助或建议,我们将不胜感激。
注意:我对Gradle和groovy还是很陌生。

谢谢

最佳答案

您的意思是“它正在返回默认值,并且没有考虑命令行参数”?我可以预期以下工作:

def props = project.properties.findAll { k, v -> k.startsWith("test_") }
    .collectEntries { k, v -> [k - "test_", v] }

tasks.register("test") {
    doLast {
        props.each { println it }
    }
}
然后,您可以获得预期的输出:
➜ gradle test -Ptest_foo=yay -Ptest_bar=baz

> Task :test
foo=yay
bar=baz
您在哪里看到问题?是否应该将这些传递给问题中省略的其他内容?
更新资料
好的,因此在src/main/java/test中给出了这个测试类:
package test;

public class Main {
    public static void main(String... args) {
        System.out.println(System.getProperty("tim", "nope"));
    }
}
如果存在,则打印系统属性“tim”的值(如果缺少,则打印“nope”)
然后,我们可以使用以下构建脚本:
plugins {
    id "java"
    id "application"
}

def props = project.properties.findAll { k, v -> k.startsWith("test_") }
    .collectEntries { k, v -> [k - "test_", v] }

mainClassName = "test.Main"

tasks.withType(JavaExec).named("run").configure { t ->
    props.each { k, v ->
        t.systemProperty k, v
    }
}
配置run插件创建的默认application任务
然后,当我们没有属性(property)时,我们得到:
➜ gradle run               

> Task :run
nope

BUILD SUCCESSFUL in 630ms
当我们设置一个属性时,它会在类中看到:
➜ gradle run -Ptest_tim=yay

> Task :run
yay

BUILD SUCCESSFUL in 552ms
希望这可以帮助 :-)

关于gradle - 如何解析Gradle任务参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60713658/

相关文章:

java - java.util.concurrent.ExecutionException:com.android.builder.internal.aapt.v2.Aapt2Exception:Android资源链接失败flutter_youtube

android - Gradle,您尚未接受许可协议(protocol)(Android SDK)

android - “Unknown source info”上的com.android.jack.ir.ast.JReturnStatement

json - Groovy 中映射到字符串/字符串到映射的转换

java - 将 spring 从 4.3.x 降级到 3.2.x 后,spock 测试中的 Autowiring bean 为空

c++ - 具有默认类型和值的模板参数

android - android项目中没有构建

maven - 如何在 Groovy 中导入 jenkins-api?

java - 类中可变数量的参数

python - 循环python的多个变量