我有3个Maven项目A,B,C。A是B的父项目,B是C的父项目。所有配置文件都在项目A的pom.xml
中定义 。
在项目C中,我试图根据所选配置文件在spring-test-context(在 src / test / resources 下)中选择属性文件。对于回归测试 >,我们有2个属性文件:
在我们的Windows开发系统上,所选配置文件将是“本地”的,并且在服务器上也将相应地配置。选择“本地”配置文件时,应在测试Spring上下文中使用application-test-local.properties
,否则应使用application-test.properties
。在项目C 中的spring-test-context.xml
中,我尝试了:
<beans profile="docker">
<util:properties id="metaDbProps" location="application-test-local.properties"/>
</beans>
<beans profile="default">
<util:properties id="metaDbProps" location="application-test.properties"/>
</beans>
但是,当我尝试“ mvn clean test -Pdocker” 时,应用程序似乎无法将所选的Maven配置文件传递给spring配置文件,并且它始终会从“ < strong>默认”个人资料。
是否知道要解决的问题,以便将Maven配置文件传递给spring配置文件,以便它可以选择正确的属性文件?
为便于理解,以下是在项目A中如何定义配置文件:
<profiles>
<!-- Windows development -->
<profile>
<id>docker</id>
<activation/>
<properties>
<INSTALL_MACHINE_LIST>localhost</INSTALL_MACHINE_LIST>
<COPY_MODE>local</COPY_MODE>
</properties>
</profile>
<!-- Development -->
<profile>
<id>dev</id>
<activation/>
<properties>
<INSTALL_MACHINE_LIST>dev01</INSTALL_MACHINE_LIST>
</properties>
</profile>
<!-- QA -->
<profile>
<id>qa</id>
<activation/>
<properties>
<INSTALL_MACHINE_LIST>dqa01</INSTALL_MACHINE_LIST>
</properties>
</profile>
<!-- Production -->
<profile>
<id>prod</id>
<activation/>
<properties>
<INSTALL_MACHINE_LIST>prod01</INSTALL_MACHINE_LIST>
</properties>
</profile>
</profiles>
答案 0 :(得分:1)
默认情况下,Maven测试是使用Maven Surefire Plugin运行的。您可以在您的Maven配置文件中将Spring配置文件声明为属性:
<profile>
<id>docker</id>
<properties>
<spring.profiles.active>docker</spring.profiles.active>
</properties>
</profile>
,然后使用<argLine>
配置将其传递给Surefire:
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<argLine>-Dspring.profiles.active=@{spring.profiles.active} @{argLine}</argLine>
</configuration>
</plugin>
</plugins>
</build>
请注意@{...}
语法:
由于版本2.17对argLine使用了替代语法,因此@ {...}允许在执行插件时延迟替换属性,因此可以正确选择由其他插件修改的属性