Как передать аргументы из командной строки в 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 оценили.

784   5  

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

    Ничего не найдено.