wake-up-neo.com

Wie kann ich die Umgebungsvariable über eine Task in Gradle einstellen?

Ich habe eine Bewerbung. Und meine Haupt-Gradle-Datei enthält einige Tasks (groovy) . Ich brauche beim Start einer Task-Umgebungsvariablen "LANG" die Codierung = ru_RU.koi8-r (für Windows, Linux) und nach Abschluss der Meine Task - Umgebungsvariable enthält den Anfangswert (de_US.UTF-8) . Wie geht das? Hilf mir bitte.

16
user2660852

Soweit ich weiß, können Sie in Gradle Task keine Systemumgebungsvariable festlegen.

Es ist jedoch möglich, eine Umgebungsvariable für diesen Prozess festzulegen. Wenn Sie die Umgebungsvariable nur für den Build festlegen müssen, verwenden Sie Folgendes:

task MyTask(type: Exec) {
  environment 'ENVIRONMENT_VARIABLE_NAME', 'environment_variable_value'

  // run or build code that needs that environment variable
}

Sie können das Kompilieren auch von dieser Aufgabe abhängig machen. Wenn Sie Ihren Code erstellen, müssen Sie vor dem Kompilieren die Umgebungsvariable festlegen:

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

Ich musste etwas zu diesem Thema recherchieren und werde versuchen, einige offene Fragen zu klären. Ich würde das in zwei Kommentaren tun, aber ich habe noch nicht genug Ansehen. Da ich den Kommentar von Igor Ganapolsky auch auf anderen Websites gefunden habe, ohne jedoch jedes Mal eine Antwort darauf zu haben, habe ich das Bedürfnis, hier eine weitere Antwort zu schreiben, auch wenn die Frage tatsächlich bereits beantwortet wurde.

Wie Martin Rajniak sagte, kann man eine Umgebungsvariable setzen, wie er gezeigt hat. Diese Variable gilt jedoch nur für die Aufgabe, für die sie definiert ist, bzw. für den entsprechenden Prozess. Das bedeutet, dass Sie es nicht für eine andere nachfolgende Aufgabe verwenden können. Ich habe das bestätigt, indem ich zwei abhängige Aufgaben definiert habe:

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

Der Befehl print.bat gibt nur die Umgebungsvariable zurück:

@echo off
echo %FOO%

Wenn Sie den Build mit dem Befehl gradle secondTask ausführen, erhalten Sie Folgendes:

> Task :firstTask
bar

> Task :secondTask
ECHO ist ausgeschaltet (OFF).

Die Umgebungsvariable ist also nicht mehr für secondTask vorhanden.

So viel zum eigentlichen Thema, aber es gibt noch eine andere wichtige Sache, die die Ursache für Igor 'Problem sein kann: Die Methode environment ist nicht für jede Gradle-Aufgabe verfügbar. Wie Sie in der Dokumentation des Exec- Aufgabentyps sehen können ist die Methode environment explizit für den Exec- Aufgabentyp definiert.

Der Vollständigkeit halber möchte ich noch erwähnen, dass Sie Variablen an einen Java-Prozess übergeben können, indem Sie die JavaExec- task-type und ihre Methode systemProperty verwenden. Sie können hier jedoch nicht environment verwenden, da diese Methode nicht für den JavaExec- Aufgabentyp definiert ist.

Ich selbst suche jedoch immer noch nach einer Möglichkeit, eine Umgebungsvariable zu definieren, die für den gesamten Build gültig ist, ohne sie direkt über das Betriebssystem zu definieren.

7
Fencer

Es gibt eine einfachere Lösung

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

Um eine Umgebungsvariable für einen bestimmten Aufgabentyp festzulegen, können Sie das folgende Code-Snippet verwenden. Die Umgebungsvariable "DOCKER_Host" würde auf alle Tasks vom Typ "Exec" gesetzt.

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

Kombination mit Gradle-Umgebungsvariablen. Laden aus Datei Frage, für Java-Plugin wäre es ..

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