web-dev-qa-db-ja.com

Gradleビルドから環境変数を設定する方法は?

Gradleビルドから環境変数を設定しようとしています。 MacOS X(El Capitan)を使用しています。コマンドは「gradle test」です。

私はbuild.gradleでこれを試しています:

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

ビルドが失敗します:

タスク ':myproject:setenv'の実行に失敗しました。

プロセス 'command' export 'の開始中に問題が発生しました

私もこれを試しました:

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

ビルドは成功します。ただし、JUnitテストで環境変数をチェックすると失敗します。

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

Gradleビルド(build.gradleファイル内)から環境変数を設定する方法はありますか?

更新:

私はそれを単独でテストしました:値は渡され、テストタスクはsystemProperty、環境変数、またはjvmArgsのすべてを受け取ります。

だから、ここのGradle自体には何の問題もありません。

問題は、実際のプロジェクトで試しているときに発生します。依存性注入にSpringを使用します。私は間違っているかもしれませんが、Springフレームワークがそれらの値をどこかでパージしているようです。

そのサブプロジェクトは現在フリーズされており、現時点では推測を詳細に確認することはできません。

40
user3791111

テストタスクでは、次のように environment property を使用できます。

test {
  environment "VAR", "val"
}

execタスクで environment property を使用することもできます

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

このメソッドでは、環境変数はタスク中にのみ設定されることに注意してください。

41
Ortomala Lokni

「environment」コマンドを使用して、環境変数設定を「追加」することもできます。

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

これはテストプラグインの環境変数を設定するために私のために働いています

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

私のプロジェクトには、サブモジュールの統合テスト用のGradleタスクがあります:

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

これは、すべてのシステムパラメーターをテスト環境に注入する主要なポイントです。そのため、このようにgradleを実行してparamにABC値を渡し、その値をコード内の$ {param}で使用できます

gradle :some-service:intTest -Dparam=ABC