Как передать аргументы из командной строки в gradle
Я пытаюсь передать аргумент из командной строки в Java-класс. Я последовал этому сообщению:http://gradle.1045684.n5.nabble.com/Gradle-application-plugin-question-td5539555.html но код не работает для меня (возможно, он не предназначен для JavaExec?). Вот что я попробовал:
task listTests(type:JavaExec){
main = "util.TestGroupScanner"
classpath = sourceSets.util.runtimeClasspath
// this works...
args 'demo'
/*
// this does not work!
if (project.hasProperty("group")){
args group
}
*/
}
выход из вышеуказанного жестко закодированного значения args:
C:wssvnsqesandboxselenium2forbgtestgradle>g listTests
:compileUtilJava UP-TO-DATE
:processUtilResources UP-TO-DATE
:utilClasses UP-TO-DATE
:listTests
Received argument: demo
BUILD SUCCESSFUL
Total time: 13.422 secs
однако, как только я изменю код, чтобы использовать раздел hasProperty и передать "demo" в качестве аргумент в командной строке, я получаю NullPointerException:
C:wssvnsqesandboxselenium2forbgtestgradle>g listTests -Pgroup=demo -s
FAILURE: Build failed with an exception.
* Where:
Build file 'C:wssvnsqesandboxselenium2forbgtestgradlebuild.gradle' line:25
* What went wrong:
A problem occurred evaluating root project 'testgradle'.
> java.lang.NullPointerException (no error message)
* Try:
Run with --info or --debug option to get more log output.
* Exception is:
org.gradle.api.GradleScriptException: A problem occurred evaluating root project
'testgradle'.
at org.gradle.groovy.scripts.internal.DefaultScriptRunnerFactory$ScriptRunnerImpl.run(DefaultScriptRunnerFactory.java:54)
at org.gradle.configuration.DefaultScriptPluginFactory$ScriptPluginImpl.apply(DefaultScriptPluginFactory.java:127)
at org.gradle.configuration.BuildScriptProcessor.evaluate(BuildScriptProcessor.java:38)
есть простой тестовый проект, доступный по адресу http://gradle.1045684.n5.nabble.com/file/n5709919/testgradle.zip это иллюстрирует проблему.
это с помощью Gradle 1.0-rc-3. NullPointer находится в этой строке кода:
args group
я добавил следующее задание перед определением задач, но это не изменило результат:
group = hasProperty('group') ? group : 'nosuchgroup'
любые указатели о том, как передать аргументы командной строки в gradle оценили.
5 ответов:
project.group- Это предопределенное свойство. С-P, вы можете установить только свойства проекта, которые не предопределенный. Кроме того, вы можете установить системные свойства Java (-D).
основываясь на ответе Питера Н, это пример того, как добавить (необязательно) пользовательские аргументы для передачи в Java main для задачи JavaExec (поскольку вы не можете установить свойство 'args' вручную по причине, которую он цитирует.)
добавьте это к задаче:
task(runProgram, type: JavaExec) { [...] if (project.hasProperty('myargs')) { args(myargs.split(',')) }... и запустить в командной строке, как это
% ./gradlew runProgram '-Pmyargs=-x,7,--no-kidding,/Users/rogers/tests/file.txt'
моя программа с двумя аргументами, args[0] и args[1]:
public static void main(String[] args) throws Exception { System.out.println(args); String host = args[0]; System.out.println(host); int port = Integer.parseInt(args[1]);моя сборка.gradle
run { if ( project.hasProperty("appArgsWhatEverIWant") ) { args Eval.me(appArgsWhatEverIWant) } }мои терминала:
gradle run -PappArgsWhatEverIWant="['localhost','8080']"
Я написал фрагмент кода, который помещает аргументы командной строки в формат, который ожидает gradle.
// this method creates a command line arguments def setCommandLineArguments(commandLineArgs) { // remove spaces def arguments = commandLineArgs.tokenize() // create a string that can be used by Eval def cla = "[" // go through the list to get each argument arguments.each { cla += "'" + "${it}" + "'," } // remove last "," add "]" and set the args return cla.substring(0, cla.lastIndexOf(',')) + "]" }моя задача выглядит так:
task runProgram(type: JavaExec) { if ( project.hasProperty("commandLineArgs") ) { args Eval.me( setCommandLineArguments(commandLineArgs) ) } }чтобы передать аргументы из командной строки, выполните следующее:
gradle runProgram -PcommandLineArgs="arg1 arg2 arg3 arg4"
передайте url из командной строки сохраните свой url в файле приложения gradle следующим образом resValue "string", "url", CommonUrl
и дать параметр в gradle.файлы свойств следующим образом CommonUrl= "поместите свой url здесь или может быть пустым"
и передать команду из командной строки следующим образом gradle assembleRelease-Pcommanurl=поместите свой URL Здесь
Comments