web-dev-qa-db-ja.com

pomから<systemPropertyVariables>変数値を取得できません

こんにちは私はJava mavenプロジェクトに取り組んでいます。このプロジェクトではpom.xmlファイルでいくつかの変数を定義する必要があります。

Pom.xmlファイルで次のように変数を定義しました。

    <plugin>
        <groupId>org.Apache.maven.plugins</groupId>
        <artifactId>maven-surefire-plugin</artifactId>
        <version>2.16</version>
        <configuration>
            <includes>
                <include>**/*Test*.Java</include>
                <include>**/*Tests*.Java</include>
                <include>**/Test*.Java</include>
            </includes>
            <systemPropertyVariables>
                <my.value>NOTNULL</my.value>
            </systemPropertyVariables>
        </configuration>
    </plugin>

my.value変数にアクセスするために、次のJavaコード)を使用しています。

    String testdata = System.getProperty("my.value");
    System.out.println(testdata);

ただし、変数の値を設定した場合でも、コンソール出力には常にnullが表示されます。

ここで何が悪いのか誰かが指摘できますか?

前もって感謝します。

編集:私もmaven-failsafe-pluginの下でsystemPropertyVariablesを宣言しようとしましたが、変更はありません。

[〜#〜] note [〜#〜]:コードのtestdata行を次のように変換しようとすると、

   String testdata = System.getProperty("my.value").toString();

上記の行でNullPointerExceptionが発生します。

編集:これを以前の回答として投稿して申し訳ありません。

私はあなたが提供したプラグイン.../pluginコードを使用してJUnitテストとしてそれを実行していますが、これが私のコンソール出力です。

21 Oct 2014 12:36:56,973 main                                     INFO  s.MyClass                  - Default Implicit timeout set in Driver to: 100  
21 Oct 2014 12:36:56,973 main                                     INFO  s.MyClass                  - Default URL for server is set to: http://localhost:8080
 ---- null

URLは私がpom.xmlファイルから取得しようとしているものであり、私が書いた条件はそれです

変数の値が空の場合は$ {で始まり、localhost:8080を返します。それ以外の場合は、URLを返します。

だからあなたが私にここで何か間違ったことを指摘することができれば

17
Ram

Windowsmaven-3.2.3JDK 1.6.0_67で動作します

maven-archetype-quickstart ..でプロジェクトを作成しました.

関連するpom行を追加しました... surefireの例 を上記の質問の特定の行と組み合わせます。

<plugin>
    <groupId>org.Apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>2.16</version>
    <configuration>
      <systemPropertyVariables>
        <my.value>NOTNULL</my.value>
        <buildDirectory>${project.build.directory}</buildDirectory>
      </systemPropertyVariables>
    </configuration>
  </plugin>

AppTest.Javaの関連行

/**
 * Rigourous Test :-)
 */
public void testApp()
{
    System.out.println(System.getProperty("my.value"));
    System.out.println(System.getProperty("buildDirectory"));
    assertTrue( true );
}

mvn testからの関連出力

-------------------------------------------------------
 T E S T S
-------------------------------------------------------
Running com.mycompany.app.AppTest
NOTNULL
C:\Users\raghu\Documents\GitHub\mvn-examples\test-properties\target
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.003 sec - in c
om.mycompany.app.AppTest

ここ はgithubのプロジェクトです。

5
Raghuram

ここで、Eclipseの 既知の制限 IDE(質問はEclipseでタグ付けされています)に遭遇しました。

Eclipseの外部のmvn testコマンドはEclipseIDEの「Maventest」実行構成と同様に機能しますが、「JUnitTest」実行構成はEclipseの完全に異なる部分ですIDE =テストコードを実行します。また、JUnit Eclipse統合(少なくとも私が実行しているJUnitバージョン4まで)には、M2Eclipseプラグイン(Eclipse内にMaven機能をもたらすプラグイン)との統合がありません。したがって、EclipseのJUnit機能はそうではありません。 Mavenの機能とその逆を認識しているため:

  • jUnitテスト結果ビューにMaven testの結果が表示されない
  • JUnitは、Mavenプロファイルまたはその他のMaven固有の構成(systemPropertyVariables surefire構成など)を読み取りません。

@Raghuramの回答では、彼はmvn test(Eclipseの外部)または "Maven test"(Eclipseの内部)を実行しているため、これを機能させました。彼がJUnitEclipse統合を使用してテストコードも実行する場合、それらのプロパティのnull値も取得します。

どのような解決策がありますか:

  • @Raghuramの回答で指摘されているように、Mavenを使用してテストを実行しますが、次の欠点があります。

    • uIから単一のテストまたはテストのパッケージを簡単に実行することはできません。そのMaven実行構成を編集し、そこでテストフィルタリング引数を提供する必要があります。 Eclipseの外部でターミナルを使用するよりも高速だと思います
    • jUnitビュー(それ自体にいくつかの便利な機能があります)に「Mavenテスト」の結果は表示されません。
  • 別のIDE(InteliJ IDEAなど)を使用しますが、次の欠点があります。

    • それは無料ではありません
    • 新しいIDEを学ぶ
  • eclipseの外部のターミナルを使用して、次の欠点があるテストを実行します。

    • あなたが恋しいIDEトラブルシューティングをスピードアップする機能
    • iDEで慣れているようにデバッグすることはできません
0