You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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里往这个属性里追加值:

  1. 在POM的<properties>节点添加:
<properties>
  <test.groups></test.groups>
</properties>
  1. 修改两个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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 02:24:52