我有一个任务,需要接受以特定前缀开头的所有参数。
我有这个 :
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/