J'essaie de passer un argument de la ligne de commande à une classe java. J'ai suivi ce post: http://gradle.1045684.n5.nabble.com/Gradle-application-plugin-question-td5539555.html mais le code ne fonctionne pas pour moi (peut-être n'est-il pas destiné à JavaExec?). Voici ce que j'ai essayé:
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
}
*/
}
La sortie de la valeur args codée en dur ci-dessus est:
C:\ws\svn\sqe\sandbox\selenium2forbg\testgradle>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
Cependant, une fois que je change le code pour utiliser la section hasProperty et que je passe "demo" comme argument sur la ligne de commande, j'obtiens une NullPointerException:
C:\ws\svn\sqe\sandbox\selenium2forbg\testgradle>g listTests -Pgroup=demo -s
FAILURE: Build failed with an exception.
* Where:
Build file 'C:\ws\svn\sqe\sandbox\selenium2forbg\testgradle\build.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)
Il existe un projet de test simple disponible sur http://gradle.1045684.n5.nabble.com/file/n5709919/testgradle.zip qui illustre le problème.
Ceci utilise Gradle 1.0-rc-3. Le NullPointer provient de cette ligne de code:
args group
J'ai ajouté l'affectation suivante avant la définition de la tâche, mais cela n'a pas changé le résultat:
group = hasProperty('group') ? group : 'nosuchgroup'
Tous les pointeurs sur la façon de passer des arguments de ligne de commande à gradle appréciés.
Réponses:
project.group
est une propriété prédéfinie. Avec-P
, vous ne pouvez définir que des propriétés de projet qui ne sont pas prédéfinies. Vous pouvez également définir les propriétés système Java (-D
).la source
S'appuyant sur la réponse de Peter N, voici un exemple de la façon d'ajouter des arguments (facultatifs) spécifiés par l'utilisateur à transmettre à Java main pour une tâche JavaExec (car vous ne pouvez pas définir la propriété 'args' manuellement pour la raison qu'il cite.)
Ajoutez ceci à la tâche:
... et exécutez sur la ligne de commande comme ceci
la source
gradle run -Purl='localhost', -Pport='8080', -Pusername='admin'
à quoi devrait ressembler mon code dans build.gradle?Mon programme avec deux arguments, args [0] et args [1]:
mon build.gradle
mon invite de terminal:
la source
Depuis Gradle 4.9, le plugin d'application comprend l'
--args
option, donc passer les arguments est aussi simple que:build.gradle
src / main / java / mon / App.java
frapper
la source
Il est possible d'utiliser des options de ligne de commande personnalisées dans Gradle pour obtenir quelque chose comme:
Cependant, les options de ligne de commande personnalisées dans Gradle sont une fonctionnalité d'incubation .
Solution Java
Pour finir avec quelque chose comme ça, suivez les instructions ici :
Puis enregistrez-le:
Maintenant vous pouvez faire:
production:
Solution Kotlin
puis enregistrez la tâche avec:
la source
Si vous avez besoin de vérifier et de définir un argument , votre
build.gradle
fichier ressemblera à ceci:Et la commande Sample dans Windows:
la source
J'ai écrit un morceau de code qui place les arguments de la ligne de commande dans le format attendu par gradle.
ma tâche ressemble à ceci:
Pour transmettre les arguments à partir de la ligne de commande, exécutez ceci:
la source
Il y a un bon exemple ici:
https://kb.novaordis.com/index.php/Gradle_Pass_Configuration_on_Command_Line
Quels détails vous pouvez passer des paramètres et ensuite fournir une valeur par défaut dans une variable ext comme ceci:
puis référence dans Gradle comme:
Et puis n'importe où dans votre script de construction, vous pouvez le référencer comme cours partout où vous pouvez le référencer comme
project.ext.color
Plus de conseils ici: https://kb.novaordis.com/index.php/Gradle_Variables_and_Properties
la source
passez une URL à partir de la ligne de commande, conservez votre URL dans le fichier de graduation de l'application comme suit resValue "string", "url", CommonUrl
et donnez un paramètre dans les fichiers gradle.properties comme suit CommonUrl = "mettez votre URL ici ou peut être vide"
et passez une commande à partir de la ligne de commande comme suit gradle assembleRelease -Pcommanurl = mettez votre URL ici
la source