Задачи 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 и это не работает.
7 ответов:
начиная с Gradle 4.9, аргументы командной строки могут передаваться с помощью --args. Например, если вы хотите запустить приложение с аргументами командной строки
foo --bar, вы можете использоватьgradle run --args= 'foo -- bar'
обновление:
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, это можно сделать с помощью сценарии
скрипт ниже:
- обработайте командную строку и удалите - - - и все остальные аргументы, следующие за ' - - -'
- добавить свойство '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ограничения:
- я был вынужден использовать '- - - 'а не' -'
- вы должны добавить какой-то глобальный скрипт
Если вам не нравится глобального сценария, вы можете указать его в командной линия
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