如何在一个 Maven 命令中运行两个配置文件?

4

我有一个pom.xml文件,其中包含surefire:test插件,并有两个配置文件来运行不同的测试模块/测试。我试图通过命令“mvn surefire:test -PfirstProfile,secondProfile”来运行这些测试。 但是,只有在pom.xml中编写的第二个配置文件被执行。这个命令是由Apache Maven网站推荐的。以下是我的pom.xml文件:

 <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>${maven.plugin.surefire.version}</version>
    <configuration>
      <forkMode>always</forkMode>
      <!-- <testFailureIgnore>true</testFailureIgnore> -->
      <failIfNoTests>false</failIfNoTests>
      <skipTests>${skipTests}</skipTests>
      <runOrder>${testRunOrder}</runOrder>
    </configuration>
    </execution>
    </executions>
  </plugin>
  <profile>
  <id>firstProfile</id>
  <properties>
        <skipTests>false</skipTests>
  </properties>
  <build>
      <plugins>
          <plugin>
              <groupId>org.apache.maven.plugins</groupId>
              <artifactId>maven-surefire-plugin</artifactId>
              <version>${maven.plugin.surefire.version}</version>
              <configuration>
                  <includes>
                    <include>**/AbcTest.java</include>
                  </includes>
              </configuration>
          </plugin>
      </plugins>

  </build>
</profile>
<profile>
  <id>SecondProfile</id>
  <properties>
        <skipTests>false</skipTests>
  </properties>
  <build>
      <plugins>
          <plugin>
              <groupId>org.apache.maven.plugins</groupId>
              <artifactId>maven-surefire-plugin</artifactId>
              <version>${maven.plugin.surefire.version}</version>

              <configuration>
                  <includes>
                      <include>**/xyzTest.java</include>                      
                  </includes>
              </configuration>
          </plugin>
      </plugins>

  </build>
</profile>

那么我如何同时运行这两个配置文件呢?我也尝试了执行 ID,但它没有起作用。

1个回答

1

尝试像这样在两个配置文件中更改maven-surefire-plugin的配置:

   <build>
      <plugins>
          <plugin>
              <groupId>org.apache.maven.plugins</groupId>
              <artifactId>maven-surefire-plugin</artifactId>
              <version>${maven.plugin.surefire.version}</version>
              <configuration>
                  <includes combine.children="append">
                    <include>**/AbcTest.java</include>
                  </includes>
              </configuration>
          </plugin>
      </plugins>

  </build>

除此之外,按照配置文件选择单元测试并不是一个好主意。如果这些测试是集成测试,应该使用maven-failsafe-plugin。

@khkhmarbaise,我的第一个配置文件是为了所有单元测试,其中我包括** / Test.java并排除* / IntegrationTest.java。 我的第二个配置文件是用于所有集成测试,其中我排除* / * Test.java并包括** / * IntegrationTest.java。这两个配置文件在我的test_runner.sh脚本中使用,以在开发人员分别指定-u或-i选项时运行单元测试和集成测试。但是当开发人员同时指定-u和-i选项时,我还想运行单元测试和集成测试。这就是为什么我试图在一个maven命令中运行两个配置文件的原因。 - user2786573
继续我的上面的评论...这导致只运行pom.xml文件中最后一个配置文件。如果您提到的maven-failsafe-plugin可以解决此问题,请告诉我。或者如果您有其他解决方案,请指定。而您提到的combine.children="append"解决方案对我不起作用。感谢您的快速回复。 - user2786573
如果您正在使用命名约定/*Test.java或/TestCase.java或/Test.java进行单元测试,那么这将由maven-surefire-plugin自动处理。如果您喜欢集成测试,您应该遵循命名约定并使用IT*.java*IT.java*ITCase.java,这是由maven-failsafe-plugin直接支持的。如果您遵循这些约定,就不需要配置(约定优于配置范例)。 - khmarbaise

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接