Maven合并两个配置文件时maven-failsafe-plugin测试分组无法合并
我有两个Maven Profile,都配置了maven-failsafe-plugin插件:
Profile 1: cdc-tests
<profile> <id>cdc-tests</id> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-failsafe-plugin</artifactId> <configuration> <groups>cdcTest</groups> <!-- <excludedGroups>integrationTest</excludedGroups> --> </configuration> </plugin> </plugins> </build> </profile>
Profile 2: integration-tests
<profile> <id>integration-tests</id> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-failsafe-plugin</artifactId> <configuration> <groups>integrationTest</groups> <!-- <excludedGroups>cdcTest</excludedGroups> --> </configuration> </plugin> </plugins> </build> </profile>
单独运行任意一个Profile时,测试都能正常执行,但同时运行两个Profile时,只会执行其中一组测试。我尝试过使用combine.children="append"的多种组合方式,但没解决问题。我需要同时运行两个Profile时,将测试分组合并为:
<groups>cdcTest,integrationTest</groups>
方法1:用Maven属性叠加实现
先在POM根节点定义一个空的测试组属性,然后每个Profile里往这个属性里追加值:
- 在POM的
<properties>节点添加:
<properties> <test.groups></test.groups> </properties>
- 修改两个Profile的配置:
cdc-tests Profile
<profile> <id>cdc-tests</id> <properties> <test.groups>${test.groups}cdcTest,</test.groups> </properties> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-failsafe-plugin</artifactId> <configuration> <groups>${test.groups}</groups> </configuration> </plugin> </plugins> </build> </profile>
integration-tests Profile
<profile> <id>integration-tests</id> <properties> <test.groups>${test.groups}integrationTest,</test.groups> </properties> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-failsafe-plugin</artifactId> <configuration> <groups>${test.groups}</groups> </configuration> </plugin> </plugins> </build> </profile>
同时激活两个Profile时,test.groups会变成cdcTest,integrationTest,,Failsafe插件能正常识别这个格式,末尾的逗号不会影响测试执行。
方法2:用combine.self="append"合并配置
之前使用的combine.children="append"是针对子节点集合的,而groups是单个文本节点,需要用combine.self="append"来合并文本内容:
修改两个Profile中的插件配置:
cdc-tests Profile
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-failsafe-plugin</artifactId> <configuration> <groups combine.self="append">cdcTest,</groups> </configuration> </plugin>
integration-tests Profile
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-failsafe-plugin</artifactId> <configuration> <groups combine.self="append">integrationTest</groups> </configuration> </plugin>
第一个Profile的groups值末尾加逗号,第二个不加,合并后就会得到cdcTest,integrationTest,刚好满足需求。
方法3:新增合并Profile(可选)
如果想要更明确的控制,可以创建一个新的Profile,当同时激活cdc-tests和integration-tests时自动激活,直接设置合并后的测试组:
<profile> <id>combined-tests</id> <activation> <activeByDefault>false</activeByDefault> <and> <activeProfile>cdc-tests</activeProfile> <activeProfile>integration-tests</activeProfile> </and> </activation> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-failsafe-plugin</artifactId> <configuration> <groups>cdcTest,integrationTest</groups> </configuration> </plugin> </plugins> </build> </profile>
这样运行mvn verify -P cdc-tests,integration-tests时,combined-tests会自动激活,覆盖之前的插件配置,直接执行两组测试。
内容的提问来源于stack exchange,提问作者Aliaksei

