Comment définir la variable d’environnement en dégradé via tâche?

J’ai application gradle. Et mon fichier de classement principal inclut quelques tâches (groovy). J’ai besoin pour démarrer une tâche – la variable d’environnement “LANG” définit encoding = ru_RU.koi8-r (pour windows, linux), et après l’achèvement de la tâche my – la variable d’environnement contient la valeur initiale (en_US.UTF-8) . Comment le faire? Aidez-moi s’il vous plaît.

    Je devais faire des recherches sur ce sujet et essayerai de clarifier certaines questions en suspens. Je le ferais plutôt en deux commentaires, mais je n’ai pas encore assez de réputation. Depuis que j’ai trouvé le commentaire d’Igor Ganapolsky également sur d’autres sites Web, mais sans réponse à chaque fois, je ressens le besoin d’écrire une autre réponse ici même si la question a déjà reçu une réponse.

    Comme Martin Rajniak l’a déclaré, vous pouvez définir une variable d’environnement comme il l’a montré. Mais cette variable n’est valide que pour la tâche dans laquelle elle est définie ou pour le processus correspondant. Cela signifie que vous ne pouvez pas l’utiliser dans une autre tâche suivante. J’ai vérifié cela en définissant deux tâches dépendantes comme ceci:

     task('firstTask', type:Exec) { environment "FOO", "bar" workingDir '.' commandLine 'cmd', '/c', 'print.bat' } task ('secondTask', type:Exec) { dependsOn firstTask workingDir '.' commandLine 'cmd', '/c', 'print.bat' } 

    La commande print.bat fait uniquement écho à la variable d’environnement:

     @echo off echo %FOO% 

    L’exécution de la construction à l’aide de la commande gradle secondTask permet d’obtenir:

     > Task :firstTask bar > Task :secondTask ECHO ist ausgeschaltet (OFF). 

    La variable d’environnement n’est donc plus là pour secondTask .

    Tellement pour le sujet réel, mais il y a une autre chose importante, qui peut être la cause du problème d’Igor: L’ environment méthode n’est pas disponible pour chaque tâche de Gradle. Comme vous pouvez le constater dans la documentation du type de tâche Exec l’ environment la méthode est explicitement défini pour le type de tâche Exec .

    Pour être complet, je veux mentionner que vous pouvez passer des variables à un processus Java en utilisant le type JavaExec JavaExec et sa méthode systemProperty . Mais vous ne pouvez pas utiliser environment ici, car cette méthode n’est pas définie pour le JavaExec -task-type JavaExec.

    Cependant, je suis moi-même toujours à la recherche d’un moyen de définir une variable d’environnement valable pour l’ensemble de la construction sans la définir directement via le système d’exploitation.

    Autant que je sache, vous ne pouvez pas définir de variable d’environnement système à partir de Gradle Task.

    Cependant, il est possible de définir une variable d’environnement pour ce processus. Donc, si vous avez besoin de définir une variable d’environnement juste pour la construction, utilisez ceci:

     task MyTask(type: Exec) { environment 'ENVIRONMENT_VARIABLE_NAME', 'environment_variable_value' // run or build code that needs that environment variable } 

    Vous pouvez également faire en sorte que la compilation dépende de cette tâche. Ainsi, si vous générez votre code, vous définissez une variable d’environnement avant de comstackr:

     tasks.withType(JavaComstack) { comstackTask -> comstackTask.dependsOn MyTask } 

    Il y a une solution plus facile

     tasks.withType(org.gradle.api.tasks.testing.Test) { systemProperty 'host', 'DEV' } 

    Pour définir une variable d’environnement pour un type de tâche particulier, vous pouvez utiliser l’extrait de code suivant. La variable d’environnement “DOCKER_HOST” serait définie sur toutes les tâches du type “Exec”.

     tasks.withType(Exec) { environment "DOCKER_HOST", "tcp://localhost:2375" }