Gradle tâche-passer les arguments à L'application Java
j'ai une application Java qui fonctionne avec une tâche gradle personnalisée et l'application nécessite quelques arguments lors de l'invocation. Ce sont:
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.
tâche Gradle ressemble à:
task run (type: JavaExec){
description = "Secure algorythm testing"
main = 'main.Test'
classpath = sourceSets.main.runtimeClasspath
}
j'ai essayé de courir gradle run -h
et ça ne marche pas.
7 réponses
depuis Gradle 4.9, les arguments en ligne de commande peuvent être passés avec --args. Par exemple, si vous voulez lancer l'application avec les arguments en ligne de commande foo --bar
, vous pouvez utiliser
gradle exécuter --args='foo-bar'
mise à jour:
Gradle 4.9 fournit un meilleur support pour passer des arguments de ligne de commande, par exemple:
gradle run --args 'arg1 arg2'
pré-Grade 4.9, ajouter ce qui suit à build.gradle
:
run {
if (project.hasProperty("appArgs")) {
args Eval.me(appArgs)
}
}
puis exécuter: gradle run -PappArgs="['arg1', 'args2']"
Désolé d'avoir répondu si tard.
j'ai trouvé une réponse identique à celle de @xlm:
task run (type: JavaExec, dependsOn: classes){
if(project.hasProperty('myargs')){
args(myargs.split(','))
}
description = "Secure algorythm testing"
main = "main.Test"
classpath = sourceSets.main.runtimeClasspath
}
et invoquer comme:
gradle run -Pmyargs=-d,s
Si vous voulez utiliser le même ensemble d'arguments tout le temps, la suite est tout ce dont vous avez besoin.
run {
args = ["--myarg1", "--myarg2"]
}
vous pouvez trouver la solution dans problèmes passant les propriétés et les paramètres du système lors de L'exécution de classe Java via Gradle . Tous deux impliquent l'utilisation du args
bien
aussi, vous devriez lire la différence entre passer avec -D
ou avec -P
qui est expliqué dans la documentation Gradle
bien sûr, les réponses font avant tout le travail, mais je voudrais quand même utiliser quelque chose comme
gradle run path1 path2
Eh bien, cela ne peut pas être fait, mais que faire si nous le pouvons:
gralde run --- path1 path2
si vous pensez qu'il est plus élégant, alors vous pouvez le faire, l'astuce est de traiter la ligne de commande et de la modifier avant gradle Ne, ce qui peut être fait en utilisant INIT scripts
Le script d'initialisation ci-dessous:
- Processus de la ligne de commande et retirez --- et tous les autres arguments suivants '---'
- ajouter propriété 'appArgs' à gradle.poste 1519180920"
ainsi dans votre tâche de course (ou JavaExec, Exec) vous pouvez:
if (project.gradle.hasProperty("appArgs")) {
List<String> appArgs = project.gradle.appArgs;
args appArgs
}
Le script d'initialisation est la suivante:
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
Limitations:
- j'ai été forcé d'utiliser '---' et non pas '--'
- You il faut ajouter un script init global
si vous n'aimez pas global init script, vous pouvez le spécifier en ligne de commande
gradle -I init.gradle run --- f:/temp/x.xml
ou mieux ajouter un alias à votre shell:
gradleapp run --- f:/temp/x.xml