web-dev-qa-db-fra.com

Comment définir une variable d'environnement à partir d'une construction Gradle?

J'essaie de définir une variable d'environnement à partir de ma version de Gradle. Je suis sur MacOS X (El Capitan) . La commande est "test de classement".

J'essaye ceci dans mon build.gradle:

task setenv(type: Exec) {
    commandLine "export", "SOME_TEST_VAR=aaa"
}
test.dependsOn setenv

et la construction échoue:

L'exécution a échoué pour la tâche ': myproject: setenv'.

Un problème est survenu lors du démarrage du processus 'commande' exportation ''

J'ai aussi essayé ceci:

test.doFirst {
    ProcessBuilder pb1 = new ProcessBuilder("export SOME_TEST_VAR=some test value")
    pb1.start();
}

La construction réussit. Cependant, si je vérifie la variable d'environnement dans mon test JUnit, elle échoue:

assertTrue(System.getenv().containsKey("SOME_TEST_VAR"));

Est-il possible de définir une variable d'environnement à partir d'une construction Gradle (dans le fichier build.gradle)?

Mettre à jour:

Je l'ai testé isolément: les valeurs sont transmises et ma tâche de test reçoit tout, qu'il s'agisse de SystemProperty, de variables d'environnement ou de jvmArgs. 

Donc, il n'y a rien de mal avec Gradle lui-même ici. 

Le problème se pose lorsque je l'essaie sur le vrai projet. Il utilise Spring pour l'injection de dépendance. Je me trompe peut-être, mais il semble que le cadre Spring supprime ces valeurs quelque part. 

Ce sous-projet est actuellement gelé et je ne peux pas vérifier mes hypothèses en détail pour le moment.

33
user3791111

Pour une tâche de test, vous pouvez utiliser la propriété environment comme ceci:

test {
  environment "VAR", "val"
}

vous pouvez également utiliser la propriété environment dans une tâche d'exécution

task dropDatabase(type: Exec) {
    environment "VAR", "val"
    commandLine "doit"
}

Notez qu'avec cette méthode, les variables d'environnement ne sont définies que pendant la tâche.

31
Ortomala Lokni

Celui-ci travaille pour moi pour les paramètres d'environnement variable pour le plugin de test

test {
    systemProperties = [
        'catalina.home': 'c:/test'
    ]
    println "Starting Tests"
    beforeTest { descriptor ->
       logger.lifecycle("Running test: " + descriptor)                
    }    
}
4
Maayan Hope

Vous pouvez également "ajouter" le paramètre de variable d'environnement en utilisant la commande 'environment':

run.doFirst { environment 'SPARK_LOCAL_IP', 'localhost' }
4
Guildenstern70

Dans mon projet, j'ai la tâche Gradle pour le test d'intégration dans le sous-module:

task intTest(type: Test) {
...
system.properties System.properties 
...

c’est le point principal pour injecter tous vos paramètres système dans l’environnement de test ... Donc, vous pouvez maintenant lancer gradle comme ceci pour passer param avec une valeur ABC et utiliser sa valeur par $ {param} dans votre code

gradle :some-service:intTest -Dparam=ABC