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
的另一个约定。
因此无需排除它们,只需重命名即可。
我有一个 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
的另一个约定。
因此无需排除它们,只需重命名即可。