maven-surefire-plugin设置forkCount=0时忽略argLine如何解决?
问题
因构建代理限制,需修改项目构建以禁用进程分叉。项目原本通过两个Maven Profile分别对应不同数据库,配置如下:
<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <configuration> <argLine>-Dspring.profiles.active=${spring.profiles.active}</argLine> </configuration> </plugin> </plugins> </build> <profiles> <profile> <id>ignite</id> <properties> <spring.profiles.active>ignite</spring.profiles.active> </properties> </profile> <profile> <id>oracle</id> <properties> <spring.profiles.active>oracle</spring.profiles.active> </properties> </profile> </profiles>
项目通过@Profile注解加载对应Spring配置。修改为禁用进程分叉后,插件配置如下:
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <configuration> <forkCount>0</forkCount> <argLine>-Dspring.profiles.active=${spring.profiles.active}</argLine> </configuration> </plugin>
此时surefire-plugin未在测试运行时应用argLine中的系统属性,导致spring.profiles.active为空,测试因配置不完整失败,该如何解决?
解决方法
方案一:使用systemPropertyVariables传递属性
当forkCount=0时,argLine的参数不会传递到当前VM,改用systemPropertyVariables直接设置系统属性:
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <configuration> <forkCount>0</forkCount> <systemPropertyVariables> <spring.profiles.active>${spring.profiles.active}</spring.profiles.active> </systemPropertyVariables> </configuration> </plugin>
方案二:将属性直接传递到Maven进程
执行Maven命令时,直接把spring.profiles.active作为全局系统属性传入,无需依赖Surefire的配置:
mvn test -Pignite -Dspring.profiles.active=ignite # 对应oracle环境执行 mvn test -Poracle -Dspring.profiles.active=oracle
方案三:在Profile内单独配置Surefire参数
在每个Maven Profile中单独配置Surefire的系统属性,确保非分叉模式下属性生效:
<profiles> <profile> <id>ignite</id> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <configuration> <forkCount>0</forkCount> <systemPropertyVariables> <spring.profiles.active>ignite</spring.profiles.active> </systemPropertyVariables> </configuration> </plugin> </plugins> </build> </profile> <profile> <id>oracle</id> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <configuration> <forkCount>0</forkCount> <systemPropertyVariables> <spring.profiles.active>oracle</spring.profiles.active> </systemPropertyVariables> </configuration> </plugin> </plugins> </build> </profile> </profiles>
内容的提问来源于stack exchange,提问作者coffman21
相关产品推荐
相关产品推荐

