

System.getPropertyで値を取得できないです

## 環境

Java 1.8  
Gradle 2.14

## コマンド

[code]

    gradle test -Denv=test
    
[/code]

## ソース

Sample.java

[code]

    import static org.junit.Assert.assertEquals;
    import org.junit.Test;
    
    
    public class Sample {
    
        @Test
        public void testHoge() {
            String hoge = System.getProperty("env");
            assertEquals("test", hoge);
        }
    
    }
    
[/code]

builde.gradle

[code]

    apply plugin: 'java'
    
    sourceCompatibility = 1.8
    
    repositories {
        mavenCentral()
    }
    
    dependencies {
        testCompile 'junit:junit:4.12'
    }
    
[/code]

## 結果

[code]

    Sample > testHoge FAILED
    java.lang.AssertionError: expected:<test> but was:<null>
        at org.junit.Assert.fail(Assert.java:88)
        at org.junit.Assert.failNotEquals(Assert.java:834)
        at org.junit.Assert.assertEquals(Assert.java:118)
        at org.junit.Assert.assertEquals(Assert.java:144)
        at Sample.testHoge(Sample.java:13)
    
[/code]

1 test completed, 1 failed


CC BY-SA 3.0
2016-06-27T02:25:43.263
27100
2016-06-29T09:37:52.337
2016-06-28T17:19:49.163
10492
16961
question
java gradle
Gradleの-Dオプションの値がJavaプログラムで取得できない


`gradle test -Denv=test` とした場合、gradleコマンドによるGradleプロセスに対してシステムプロパティ `env=test`
を指定したことになります。Gradleプロセスから起動されるテスト用のJavaプロセスには届きません。

Gradleプロセスから起動されるテスト用のJavaプロセスに、Gradleプロセスと同じシステムプロパティを渡すためには以下のように設定します。これはJavaプラグインの
`Test`
型のタスクに対してGradleプロセス自体のシステムプロパティ(`System.properties`)をすべて、起動するJavaプロセスのシステムプロパティ(`systemProperties`)に設定しています。

[code]

    tasks.withType(Test) {
        systemProperties System.properties
    }
    
[/code]

ちなみに、テストではなくアプリケーション用のJavaプロセスにシステムプロパティを引き継ぐには以下のようにします。

[code]

    tasks.withType(JavaExec) {
        systemProperties System.properties
    }
    
[/code]


CC BY-SA 3.0
2016-06-27T23:01:10.717
27119
2016-06-27T23:01:10.717
2356
27100
answer