Maven war 在测试 运行 之前跳过了打包

Maven war packaging skipped prior to tests being run

我有一个 Maven 项目,它有一些基于 Selenium 的集成测试 运行 在一个名为 sit 的包中。我已经将故障安全插件配置为在包中包含测试文件,例如。 <include>sit/**/*Test.java</include>.

我正在尝试 运行 mvn clean install 并且当它启动测试时我注意到它实际上并没有 运行 maven-war-plugin 即没有打包在 运行 进行测试之前将其转换为 war。但是,如果我 运行 mvn clean install -Dmaven.test.skip=true 那么它会成功打包 war。 (我还配置了用于部署 war 的 cargo 插件,这就是我注意到存在问题的方式,因为它无法部署不存在的 war)

我的pom结构类似下面

<project ...>
    <modelVersion>4.0.0</modelVersion>

    <groupId>a</groupId>
    <artifactId>a</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>war</packaging>

    <dependencies>
       ...
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-failsafe-plugin</artifactId>
                <version>2.18.1</version>

                <configuration>
                    <includes>
                        <include>sit/**/*Test.java</include>
                    </includes>
                </configuration>
                <executions>
                    <execution>
                        <id>integration-test</id>
                        <phase>integration-test</phase>
                        <goals>
                            <goal>integration-test</goal>
                            <goal>verify</goal>
                        </goals>
                    </execution>
                </executions>             
            </plugin>
         </plugins>
    </build>
</project>

知道为什么不设置 -Dmaven.test.skip=true 运行 war 插件吗?

它在两种情况下都会创建 class 个文件

好吧,看来问题是 maven-surefire 试图 运行 集成测试作为单元测试,所以我们必须明确地从 surefires 单元测试中排除集成测试

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    ...
    <configuration>
        <excludes>
            <exclude>sit/**/*Test.java</exclude>
        </excludes>
    </configuration>
</plugin>

尝试重命名您的测试 类 以便集成测试带有 *IT.java 后缀(或前缀...),因为这是测试的约定 运行通过 maven-failsafe-plugin.

*Test.java 是 运行 测试 maven-surefire-plugin 的另一个约定。

因此无需排除它们,只需重命名即可。