117 votes

Comment passer des arguments de la ligne de commande à Gradle ?

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 d'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, dès que je modifie le code pour utiliser la section hasProperty et passer "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) 

Un projet de test simple est disponible à l'adresse suivante http://gradle.1045684.n5.nabble.com/file/n5709919/testgradle.zip qui illustre le problème.

J'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' 

Toute indication sur la façon de passer des arguments de ligne de commande à gradle sera appréciée.

0 votes

TNX alot @Joshua Goldberg. échantillon pour un argument : stackoverflow.com/a/58202665/2201814

0 votes

8voto

MHSFisher Points 733

Si vous devez vérifier et régler un argument , votre build.gradle serait comme ceci :

....

def coverageThreshold = 0.15

if (project.hasProperty('threshold')) {
    coverageThreshold = project.property('threshold').toString().toBigDecimal()
}

//print the value of variable
println("Coverage Threshold: $coverageThreshold")
...

Et l'exemple de commande dans Windows :

gradlew clean test -Pthreshold=0.25

4voto

J'ai écrit un morceau de code qui met les arguments de la ligne de commande dans le format attendu par Gradle.

// this method creates a command line arguments
def setCommandLineArguments(commandLineArgs) {
    // remove spaces 
    def arguments = commandLineArgs.tokenize()

            // create a string that can be used by Eval 
            def cla = "["
            // go through the list to get each argument
            arguments.each {
                    cla += "'" + "${it}" + "',"
            }

    // remove last "," add "]" and set the args 
    return cla.substring(0, cla.lastIndexOf(',')) + "]"
}

ma tâche ressemble à ceci :

task runProgram(type: JavaExec) {
    if ( project.hasProperty("commandLineArgs") ) {
            args Eval.me( setCommandLineArguments(commandLineArgs) )
    }
}

Pour passer les arguments à partir de la ligne de commande, vous exécutez ceci :

gradle runProgram -PcommandLineArgs="arg1 arg2 arg3 arg4"

3voto

Matt Wolfe Points 4123

Il y a un excellent exemple ici :

https://kb.novaordis.com/index.php/Gradle_Pass_Configuration_on_Command_Line

Ce qui détaille que vous pouvez passer des paramètres et ensuite fournir une valeur par défaut dans une variable ext comme ceci :

gradle -Dmy_app.color=blue

et ensuite référencer dans Gradle comme :

ext {
   color = System.getProperty("my_app.color", "red");
}

Et puis n'importe où dans votre build script vous pouvez le référencer comme bien sûr n'importe 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

0voto

Mahozad Points 1573

Voici une solution pour Kotlin DSL (build.gradle.kts).

J'essaie d'abord de récupérer la variable en tant que propriété et si c'est le cas null essayer de l'obtenir à partir des variables d'environnement du système d'exploitation (peut être utile dans les CI comme les actions GitHub).

tasks.create("MyCustomTask") {
    val songName = properties["songName"]
        ?: System.getenv("SONG_NAME")
        ?: error("""Property "songName" or environment variable "SONG_NAME" not found""")

    // OR getting the property with 'by'. Did not work for me!
    // For this approach, name of the variable should be the same as the property name
    // val songName: String? by properties

    println("The song name: $songName")
}

Nous pouvons alors passer une valeur pour la propriété à partir de la ligne de commande :

./gradlew MyCustomTask -PsongName="Black Forest"

Ou créez un fichier nommé local.properties à la racine du projet et définir la propriété :

songName=Black Forest

Nous pouvons également ajouter une variable env. nommé SONG_NAME avec la valeur désirée et ensuite exécuter la tâche :

./gradlew MyCustomTask

-5voto

Arun Kawdiya Points 1

Passer une url depuis la ligne de commande garder votre url dans le fichier app gradle comme suit resValue "string", "url", CommonUrl

et donner un paramètre dans les fichiers gradle.properties comme suit CommonUrl="mettez votre url ici ou peut être vide".

et passer une commande à partir de la ligne de commande comme suit gradle assembleRelease -Pcommanurl=inscrire votre URL ici

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X