Получить список активированного имени профиля во время выполнения в проекте maven java

Мне нужно иметь возможность использовать профиль, активированный в течение времени выполнения тестов JUnit. Мне было интересно, есть ли способ сделать что-то вроде:

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

Или любой другой относительный способ...

Я понял, что есть возможность использовать ${project.profiles[0].id} bu, как-то он не работает.

Любые идеи?

Ответ 1

При использовании 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>  

И в моем unit test я добавил следующее:

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

При вызове команды "test" без профиля (т.е. с помощью mvn test) я получил следующее:

-------------------------------------------------------
 T E S T S
-------------------------------------------------------
Running com.fxs.AppTest
Profile ID:  development
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.003 sec - in com.fxs.AppTest

Results :

Tests run: 1, Failures: 0, Errors: 0, Skipped: 0

И я использовал mvn -P special-profile2 test, я получил это

-------------------------------------------------------
 T E S T S
-------------------------------------------------------
Running com.fxs.AppTest
Profile ID:  special-profile2
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.002 sec - in com.fxs.AppTest

Results :

Tests run: 1, Failures: 0, Errors: 0, Skipped: 0

Это будет проходить по имени первого активного профиля. Если у нас есть потенциально более одного активного профиля, то нам, вероятно, придется использовать больше системных свойств.

Примечание. Я проверил это, используя Maven 3.1.1

Ответ 2

В других случаях я использовал следующий файл pom:

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

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

и в java:

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