当前位置: 首页 > 知识库问答 >
问题:

获取maven java项目中运行时激活的配置文件名称列表

孟开宇
2023-03-14

我需要能够使用在JUnit测试运行期间激活的概要文件。我想知道是否有什么方法可以做到:

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

或任何其他相关方式。。。

我意识到有一个选项可以使用${project.profiles[0].id}bu,但不知何故它不起作用。

有什么想法吗?

共有2个答案

景俊良
2023-03-14

我接下来在pom文件中使用的其他案例:

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

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

java中:

String flagValue = System.getenv("flag");
程修雅
2023-03-14

当使用surefire运行单元测试时,它通常会生成一个新的JVM来运行测试,我们必须将信息传递给新的JVM。这通常可以使用“systemPropertyVariables”标记完成。

我能够使用quickstart 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特别版2测试,我得到了这个

-------------------------------------------------------
 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对其进行了测试

 类似资料:
  • 我声明了一些特定于Maven配置文件的属性。我的pom.xml的一部分: 当我通过IntelliJ IDEA 2016启动Junit测试时,我在使用“ci”Maven配置文件时遇到一些问题。我通过“Maven项目”面板激活我的配置文件,然后启动测试。问题是“my.properties.file”属性值等于“foo.xml”,而不是“bar.xml”。 我对命令行没有问题(我可以使用“-Pci”标志

  • 我有5个环境: 我希望对每个环境使用不同的应用程序属性,因此我有以下属性文件,每个属性文件都有不同的数据源URL: 我正在使用IntelliJ并在本地机器上的Gradle插件中使用bootRun运行我的应用程序。我将使用在运行Tomcat的所有其他环境中部署相同的应用程序war文件。 我尝试添加: --spring.profiles.active=local 到脚本参数下的运行配置。 我尝试添加

  • 如何在测试用例的运行时获得当前运行套件的名称?我正在使用下面显示的一段代码来获取当前套件名称。 Listeners类: 在这种情况下,我无法获得套件名称--它没有执行。有人能帮我查一下套房的名字吗?

  • 但却被忽略了。 是否可以使用maven激活配置文件?

  • Maven允许根据其运行的操作系统系列激活某些构建概要文件,例如: 这里有很多问题:那么的允许值是多少?它们区分大小写吗?Linux是吗?还是?等等。 我可以在哪里找到关于允许的值的信息-或者,至少,Maven从哪里获取这些值?环境变量?