web-dev-qa-db-ja.com

Mavenでの実行時にアクティブ化されたプロファイル名のリストを取得Javaプロジェクト

JUnitテストの実行時にアクティブ化されたプロファイルを使用できる必要があります。私は次のようなことをする方法があるかどうか疑問に思いました:

String str = System.getProperty("activated.profile[0]");

または他の相対的な方法...

${project.profiles[0].id}buを使用するオプションがあることに気づきました。どういうわけかそれは機能していません。

何か案は?

13
Mickey Hovel

Surefireを使用して単体テストを実行すると、通常、テストを実行するために新しいJVMが生成され、その情報を新しいJVMに渡す必要があります。これは通常、「systemPropertyVariables」タグを使用して実行できます。

クイックスタートJavaプロジェクトを使用してこれを実行することができました。ここで、これをPOMに追加しました。

私は次のプロファイルを宣言しました

<profiles>
    <profile>
        <id>special-profile1</id>
    </profile>
    <profile>
        <id>special-profile2</id>
    </profile>
</profiles>     

そしてこれは確実な構成になります:

<build>
    <plugins>
        ...
        <plugin>
           <groupId>org.Apache.maven.plugins</groupId>
           <artifactId>maven-surefire-plugin</artifactId>
           <version>2.19</version>
           <configuration>
               <systemPropertyVariables>
                   <profileId>${project.activeProfiles[0].id}</profileId>
               </systemPropertyVariables>
           </configuration>
        </plugin>
        ...
    </plugins>
</build>  

そして、私のユニットテストで、私はこれを追加しました:

/**
 * Rigourous Test :-)
 */
public void testApp()
{
    System.out.println("Profile ID:  " + System.getProperty("profileId"));
}

プロファイルなしで(つまり、mvn testを使用して)「test」コマンドを呼び出すと、次のようになります。

 --------------------------------------------- ---------- 
テスト
 ----------------------------- -------------------------- 
 com.fxs.AppTestの実行
プロファイルID:開発
テストの実行:1、失敗:0、エラー:0、スキップ:0、経過時間:0.003秒-com.fxs.AppTest 
 
結果:
 
テストの実行:1、失敗:0、エラー:0、スキップ:0 

そして、私たちはmvn -P special-profile2 testを使用しました、私はこれを手に入れました

 --------------------------------------------- ---------- 
テスト
 ----------------------------- -------------------------- 
 com.fxs.AppTestを実行しています
プロファイルID:special-profile2 
テストの実行:1、失敗:0、エラー:0、スキップ:0、経過時間:0.002秒-com.fxs.AppTest 
 
結果:
 
テストの実行:1、失敗:0、エラー:0、スキップ:0 

これにより、最初のアクティブなプロファイルの名前が渡されます。潜在的に複数のアクティブなプロファイルがある場合は、おそらくより多くのシステムプロパティを使用する必要があります。

注:Maven3.1.1を使用してこれをテストしました

15
fshehadeh

次にpomファイルで使用した他のケース:

<profiles>
    <profile>
        <id>a-profile-id</id>

        <properties>
            <flag>a-flag-value</flag>
        </properties>
    </profile>
</profiles>

およびJavaの場合:

String flagValue = System.getenv("flag");
0
Horatiu