J'ai une application Java qui s'exécute avec une tâche gradle personnalisée et l'application nécessite certains arguments lorsqu'elle est appelée. Ceux-ci 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.
La 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 cela ne fonctionne pas.
Réponses:
Depuis Gradle 4.9, les arguments de la ligne de commande peuvent être passés avec --args. Par exemple, si vous souhaitez lancer l'application avec des arguments de ligne de commande
foo --bar
, vous pouvez utiliserVoir aussi Gradle Application Plugin
Comment mettre à niveau le wrapper Gradle
la source
'foo --bar'
est déroutant, pourquoi ne pas simplement utiliser'foo bar'
.Gradle 4.9+
Cela suppose que vous êtes
build.gradle
configuré avec le plugin Application . Votrebuild.gradle
devrait ressembler à ceci:Pré-Gradle 4.9
Incluez les éléments suivants dans votre
build.gradle
:Puis pour courir:
gradle run -PappArgs="['arg1', 'args2']"
la source
gradle run --args 'arg1 arg2'
n'a pas fonctionné pour moi. Je devais faire:gradle run --args='arg1 arg2'
Désolé d'avoir répondu si tard.
J'ai trouvé une réponse similaire à celle de @xlm:
Et invoquez comme:
la source
Si vous souhaitez utiliser le même ensemble d'arguments tout le temps, voici tout ce dont vous avez besoin.
la source
id 'application'
plugin et c'était la réponse dont j'avais besoin (ça marche).Vous pouvez trouver la solution dans Problèmes de transmission des propriétés système et des paramètres lors de l'exécution de la classe Java via Gradle . Les deux impliquent l'utilisation de la
args
propriétéVous devriez également lire la différence entre passer avec
-D
ou avec-P
qui est expliquée dans la documentation Gradlela source
Bien sûr, les réponses font avant tout le travail, mais j'aimerais quand même utiliser quelque chose comme
Eh bien, cela ne peut pas être fait, mais si nous pouvons:
Si vous pensez que c'est plus élégant, alors vous pouvez le faire, l'astuce est de traiter la ligne de commande et de la modifier avant que gradle ne le fasse, cela peut être fait en utilisant des scripts d'initialisation
Le script init ci-dessous:
Ainsi, dans votre tâche d'exécution (ou JavaExec, Exec), vous pouvez:
Le script init est:
Limites:
Si vous n'aimez pas le script d'initialisation global, vous pouvez le spécifier en ligne de commande
Ou mieux ajouter un alias à votre shell:
la source
argsI.remove()
ait l'effet souhaité). Suggestions?Vous devez les transmettre
args
à la tâche en utilisant les propriétés du projet, quelque chose comme:ajouté à votre définition de tâche (voir la documentation dsl )
Ensuite, vous pouvez l'exécuter comme:
la source