web-dev-qa-db-fra.com

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

J'ai une demande de diplome. Et mon fichier de classement principal inclut quelques tâches (groovy) . Il me faut pour démarrer ma tâche - la variable d’environnement "LANG" définit encoding = ru_RU.koi8-r (pour windows, linux), ma tâche - la variable d’environnement contient la valeur initiale (en_US.UTF-8) . Comment procéder? Aidez-moi, s'il vous plaît.

16
user2660852

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. Ainsi, si vous devez définir une variable d’environnement uniquement 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 compiler:

tasks.withType(JavaCompile) {
  compileTask -> compileTask.dependsOn MyTask
}
7
Martin Rajniak

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 est déjà résolue.

Comme l'a déclaré Martin Rajniak, 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 donnera:

> Task :firstTask
bar

> Task :secondTask
ECHO ist ausgeschaltet (OFF).

Donc, la variable d'environnement n'est plus là pour secondTask.

Voilà pour le sujet réel, mais il y a une autre chose importante qui peut être la cause du problème d'Igor: La méthode environment n'est pas disponible pour chaque tâche de Gradle. Comme vous pouvez le voir dans la documentation de Exec- task-type la méthode environment est explicitement définie pour le Exec- type de tâche.

Pour terminer, je tiens à mentionner que vous pouvez transmettre des variables à un processus Java à l’aide de JavaExec- task-type et de sa méthode systemProperty. Mais vous ne pouvez pas utiliser environment ici, car cette méthode n'est pas définie pour le type JavaExec- task.

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.

7
Fencer

Il y a une solution plus facile

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

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 pour toutes les tâches du type "Exec".

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

Combinaison avec variables d'environnement Gradle. Charger à partir du fichier Question, ce serait pour le plugin Java.

tasks.withType(JavaExec) {
    file('.env').readLines().each() {
        def (key, value) = it.tokenize('=')
        environment key, value
    }
}
0
Keenan Gebze