web-dev-qa-db-ja.com

タスクを介してgradleで環境変数を設定するにはどうすればよいですか?

Gradleアプリケーションがあります。そして、私のメインのgradleファイルにはいくつかのタスク(groovy)が含まれています。タスクを開始するときに必要です-環境変数 "LANG" set encoding = ru_RU.koi8-r(Windows、Linuxの場合)、およびタスクの完了後-環境変数には初期値が含まれます(en_US.UTF-8) 。どうやって?お願い助けて。

16
user2660852

私の知る限り、Gradle Taskからシステム環境変数を設定することはできません。

ただし、そのプロセスの環境変数を設定することは可能です。したがって、ビルドのためだけに環境変数を設定する必要がある場合は、これを使用します。

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

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

コンパイルをそのタスクに依存させることもできるため、コードをビルドする場合は、コンパイルする前に環境変数を設定します。

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

このトピックでいくつかの調査を行う必要があり、いくつかの未解決の問題を明確にしようとします。代わりに2つのコメントでそれを行いますが、まだ十分な評判がありません。 Igor Ganapolskyのコメントは他のWebサイトでも見つけましたが、質問が実際にすでに回答されている場合でも、毎回回答なしでここに別の回答を書く必要があると感じています。

Martin Rajniakが述べたように、彼が示したように環境変数を設定できます。ただし、その変数は、それが定義されているタスクまたは対応するプロセスに対してのみ有効です。つまり、次の別のタスクでは使用できません。次のような2つの依存タスクを定義することで、それを検証しました。

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

コマンドprint.batは、環境変数のみをエコーし​​ます。

@echo off
echo %FOO%

コマンドgradle secondTaskを使用してビルドを実行すると、次の結果が得られます。

> Task :firstTask
bar

> Task :secondTask
ECHO ist ausgeschaltet (OFF).

したがって、secondTaskの環境変数はもうありません。

実際のトピックについては以上ですが、イゴールの問題の原因である可能性のある別の重要なことがあります。メソッドenvironmentはすべてのGradleタスクで使用できるわけではありません。 Exec-- task-type のドキュメントでわかるように、メソッドenvironmentExec- task-typeに対して明示的に定義されています。

完了するために、 JavaExec- task-type とそのメソッドsystemPropertyを使用して、変数をJavaプロセスに渡すことができます。ここでenvironmentは、そのメソッドがJavaExec- task-typeに対して定義されていないためです。

しかし、私自身は、オペレーティングシステム経由で直接定義せずに、ビルド全体に有効な環境変数を定義する方法をまだ探しています。

7
Fencer

より簡単な解決策があります

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

特定のタスクタイプの環境変数を設定するには、次のコードスニペットを使用できます。環境変数「DOCKER_Host」は、タイプ「Exec」のすべてのタスクに設定されます。

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

Gradle Environment variables。Load from file questionと組み合わせて、Javaプラグインになります。

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