2012-03-08 6 views
6

mavenでいくつかのテストを実行し、コマンドラインからパラメータを渡す必要があります。mavenからjavaパラメータを渡す

私のJavaコードは、パラメータを次のように取得する必要があります。 System.getenv( "my_parameter1");

と私は以下の例のようにpom.xmlファイルでパラメータを定義: (後者を、私はきれいな-Dmy_parameter1 = VALUE1をインストールする共通線MVNからパラメータを取得するためのpom.xmlを修正したい)

ただし、動作しません。 System.getenv( "my_parameter1")はnullを返します。 pom.xmlファイルでパラメータをどのように定義する必要がありますか? pom.xmlに環境変数にアクセスするための

のpom.xml

<project> 
    ... 
    <profiles> 
    <profile> 
     <properties> 
     <my_parameter1>value1</my_parameter1> 
     </properties> 
     <build> 
     <plugins> 
      <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-surefire-plugin</artifactId> 
      <executions> 
       <execution> 
       <id>slowTest</id> 
       <phase>test</phase> 
       <goals> 
        <goal>test</goal> 
       </goals> 
       <configuration> 
        <skip>false</skip> 
        <includes> 
        <include>**/*Test.java</include> 
        <include>**/*TestSlow.java</include> 
        </includes> 
        <properties> 
        <my_parameter1>value1</my_parameter1> 
        </properties> 
       </configuration> 
       </execution> 
      </executions> 
      </plugin> 
     </plugins> 
     </build> 
    </profile> 
    </profiles> 
</project> 

答えて

16

System.getenv()は、の環境変数PATHなど)を読み取ります。あなたが望むのはシステムプロパティを読むことです。 -D [システムプロパティ名] = [値]はシステムプロパティ用であり、環境変数用ではありません。あなたはMavenを起動する前に、環境変数my_parameter1を設定するOS固有のメソッドを使用し、環境変数を使用したい場合は

  1. は、2つのオプションがあります。 Windowsの場合、set my_parameter1=<value>を使用してください.'nix use export my_parameter1=<value> 'にあります。

  2. System.getProperty()を使用して、コード内のシステムプロパティ値を読み取ることができます。

例:

String param = System.getProperty("my_parameter1"); 

はあなたの確実なプラグイン設定では、あなたが使用することができます。

Mavenのプロパティ_my_property1_を取り、あなたのテストでも、それを設定します
<configuration> 
    <systemPropertyVariables> 
     <my_property1>${my_property1}</my_property1> 
    </systemPropertyVariables> 
</configuration> 

さらに詳しい情報here

Mavenのシステムプロパティが自動的にテストに渡されるかどうか、フォークモードがこのようなことに影響を与えるかどうかわからないので、明示的に渡すことをお勧めします。

+1

ちょうどチェックされています:Mavenシステムのプロパティはテストに自動的に渡されません。 – SiKing

2

使用

${env.my_parameter} 

あなたは、通常のプロパティの使用量があまりにも動作するはずしかし

mvn help:system 

に設定されている変数を参照するために役立つプラグインを使用することができます。しかし、大きな文脈では、私は疑問に思います...あなたは何をしたいですか?簡単な解決策があるかもしれません。

2

maven surefireプラグインにもoption to set environment variablesがあります。これをプラグインの設定に追加してください。

<environmentVariables> 
    <my_parameter1>value</my_parameter1> 
</environmentVariables> 

これは、プラグインがデフォルトであるfork modeで動作する必要があると思います。

+0

フォークモードでは+1 ...ドキュメントには書かれていません。 – JSlain

関連する問題