Как разобрать аргументы задачи Gradle - PullRequest
1 голос
/ 17 марта 2020

У меня есть задача, которая должна принимать любые аргументы, которые начинаются с указанного префикса c. У меня есть это:

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.

спасибо

1 Ответ

0 голосов
/ 17 марта 2020

Что вы имеете в виду " Возвращает значение по умолчанию и не учитывает аргумент командной строки "? Следующее работает, как я ожидал:

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

Затем, когда мы go не обладаем свойством, мы получаем:

➜ gradle run               

> Task :run
nope

BUILD SUCCESSFUL in 630ms

И когда мы устанавливаем свойство, оно видится классом:

➜ gradle run -Ptest_tim=yay

> Task :run
yay

BUILD SUCCESSFUL in 552ms

Надеюсь, это поможет: -)

...