Задачи Gradle - передача аргументов в Java-приложение



у меня есть приложение Java, которое работает с пользовательской задачей gradle, и приложение требует некоторых аргументов при вызове. Это:



programName ( string | -f filename | -d key | -h)
Options:
string Message to be used.
-d key Use default messages, key must be s[hort], m[edium] or l[ong].
-f filename Use specified file as input.
-h Help dialog.


задача Gradle выглядит так:



task run (type: JavaExec){
description = "Secure algorythm testing"
main = 'main.Test'
classpath = sourceSets.main.runtimeClasspath
}


Я пробовал использовать gradle run -h и это не работает.

1151   7  

7 ответов:

начиная с Gradle 4.9, аргументы командной строки могут передаваться с помощью --args. Например, если вы хотите запустить приложение с аргументами командной строки foo --bar, вы можете использовать

gradle run --args= 'foo -- bar'

См. Также Gradle Application Plugin

Как обновить Gradle wrapper

обновление:
Gradle в 4.9 обеспечивает лучшую поддержку для передачи аргументов командной строки, например:

gradle run --args 'arg1 arg2'

Pre-Gradle 4.9, добавьте следующее к build.gradle:

run {
    if (project.hasProperty("appArgs")) {
        args Eval.me(appArgs)
    }
}

затем запустить: gradle run -PappArgs="['arg1', 'args2']"

извините за ответ так поздно.

Я придумал ответ, похожий на @xlm ' s:

task run (type: JavaExec, dependsOn: classes){
    if(project.hasProperty('myargs')){
        args(myargs.split(','))
    }
    description = "Secure algorythm testing"
    main = "main.Test"
    classpath = sourceSets.main.runtimeClasspath
}

и вызвать как:

gradle run -Pmyargs=-d,s

Если вы хотите использовать один и тот же набор аргументов все время, после все, что вам нужно.

run {
    args = ["--myarg1", "--myarg2"]
}

вы можете найти решение в проблемы передачи системных свойств и параметров при запуске класса Java через Gradle . Оба включают в себя использование args свойства

также вы должны прочитать разницу между передачей с -D или -P пояснил, что в документации Gradle

конечно, ответы прежде всего сделать работу, но я хотел бы использовать что-то вроде

gradle run path1 path2

ну это не может быть сделано, но что, если можно:

gralde run --- path1 path2

если вы думаете, что это более элегантно, то вы можете это сделать, трюк состоит в том, чтобы обработать командную строку и изменить ее до gradle, это можно сделать с помощью сценарии

скрипт ниже:

  1. обработайте командную строку и удалите - - - и все остальные аргументы, следующие за ' - - -'
  2. добавить свойство 'appArgs' в gradle.ext

так что в вашей задаче запуска (или JavaExec, Exec) вы можете:

if (project.gradle.hasProperty("appArgs")) {
                List<String> appArgs = project.gradle.appArgs;

                args appArgs

 }

сценарий init является:

import org.gradle.api.invocation.Gradle

Gradle aGradle = gradle

StartParameter startParameter = aGradle.startParameter

List tasks = startParameter.getTaskRequests();

List<String> appArgs = new ArrayList<>()

tasks.forEach {
   List<String> args = it.getArgs();


   Iterator<String> argsI = args.iterator();

   while (argsI.hasNext()) {

      String arg = argsI.next();

      // remove '---' and all that follow
      if (arg == "---") {
         argsI.remove();

         while (argsI.hasNext()) {

            arg = argsI.next();

            // and add it to appArgs
            appArgs.add(arg);

            argsI.remove();

        }
    }
}

}


   aGradle.ext.appArgs = appArgs

ограничения:

  1. я был вынужден использовать '- - - 'а не' -'
  2. вы должны добавить какой-то глобальный скрипт

Если вам не нравится глобального сценария, вы можете указать его в командной линия

gradle -I init.gradle run --- f:/temp/x.xml

или лучше добавить псевдоним в оболочку:

gradleapp run --- f:/temp/x.xml

вы должны передать их как args к задаче с помощью свойств проекта, что-то вроде:

args = [project.property('h')]

добавлено в определение задачи (см. dsl docs)

затем вы можете запустить его как:

gradle -Ph run

Comments

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