如何解析Gradle任务参数



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

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";如果它存在(或者"不存在",如果它丢失(

然后我们可以使用这个构建脚本:

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
}
}

配置application插件创建的默认run任务

然后,当我们没有财产时,我们得到:

➜ gradle run               
> Task :run
nope
BUILD SUCCESSFUL in 630ms

当我们设置一个属性时,它会被类看到:

➜ gradle run -Ptest_tim=yay
> Task :run
yay
BUILD SUCCESSFUL in 552ms

希望这有帮助:-(

最新更新