在 Maven java 项目 运行 时间内获取激活的配置文件名称列表
Get list of activated profile name during run time in maven java project
我需要能够使用在 运行 JUnit 测试期间激活的配置文件。
我想知道是否有任何方法可以做类似的事情:
String str = System.getProperty("activated.profile[0]");
或任何其他相关方式...
我意识到有一个选项可以使用 ${project.profiles[0].id}
但不知何故它不起作用。
有什么想法吗?
当使用 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"));
}
在没有配置文件的情况下调用 "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
测试了这个
我在 pom 文件中接下来使用的其他情况:
<profiles>
<profile>
<id>a-profile-id</id>
<properties>
<flag>a-flag-value</flag>
</properties>
</profile>
</profiles>
在java中:
String flagValue = System.getenv("flag");
我需要能够使用在 运行 JUnit 测试期间激活的配置文件。 我想知道是否有任何方法可以做类似的事情:
String str = System.getProperty("activated.profile[0]");
或任何其他相关方式...
我意识到有一个选项可以使用 ${project.profiles[0].id}
但不知何故它不起作用。
有什么想法吗?
当使用 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"));
}
在没有配置文件的情况下调用 "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
测试了这个我在 pom 文件中接下来使用的其他情况:
<profiles>
<profile>
<id>a-profile-id</id>
<properties>
<flag>a-flag-value</flag>
</properties>
</profile>
</profiles>
在java中:
String flagValue = System.getenv("flag");