看来你没理解这个概念构建生命周期 http://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html在马文中。如果你跑mvn install
所有生命周期阶段(包括install
阶段本身)在安装阶段之前运行。这意味着运行以下阶段:
- validate
- 初始化
- 生成源
- 过程源
- 生成资源
- 流程资源
- compile
- 过程类
- 生成测试源
- 过程测试源
- 生成测试资源
- 流程测试资源
- 测试编译
- 过程测试类
- test
- 准备包
- package
- 预集成测试
- 集成测试
- 集成后测试
- verify
- install
换句话说,这意味着test
也integration-test
包括生命周期阶段。因此,如果没有任何补充信息,就不可能按照您的意愿改变行为。
可以通过使用 Maven 中的配置文件来实现:
<project>
[...]
<profiles>
<profile>
<id>no-unit-tests</id>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<skipTests>true</skipTests>
</configuration>
</plugin>
</plugins>
</build>
</profile>
</profiles>
[...]
</project>
所以你的第一个要求:
- 如果我跑
mvn install
,我希望编译所有测试,但不想执行任何测试。
可以通过使用以下方法来实现:
mvn -Pno-unit-test test
- 如果我跑
mvn test
,我希望编译所有测试,但仅执行单元测试。
这可以通过使用简单的调用来简单地实现:
mvn test
导致集成测试阶段未运行(请参阅构建生命周期)。
- 如果我跑
mvn integration-test
,我想编译并执行所有测试。
这意味着运行默认值,其中包括运行test
阶段将运行单元测试(maven-surefire-plugin),并进一步运行由 maven-failsafe-plugin 处理的集成测试。但您应该注意,如果您想调用集成测试,您应该使用以下命令:
mvn verify
相反,因为你错过了post-integration-test
您上次通话的阶段。
除了上述内容之外,您还应该遵循单元和集成测试的命名约定,其中单元测试 http://maven.apache.org/surefire/maven-surefire-plugin/test-mojo.html应命名如下:
<includes>
<include>**/*Test*.java</include>
<include>**/*Test.java</include>
<include>**/*TestCase.java</include>
</includes>
and 集成测试 http://maven.apache.org/surefire/maven-failsafe-plugin/integration-test-mojo.html#includes应命名如下:
<includes>
<include>**/IT*.java</include>
<include>**/*IT.java</include>
<include>**/*ITCase.java</include>
</includes>
我希望您已经配置了如下所示的 maven-failsafe-plugin,这是将 maven-failsafe-plugin 绑定到正确的生命周期阶段所需的:
<project>
[...]
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-failsafe-plugin</artifactId>
<version>2.15</version>
<executions>
<execution>
<goals>
<goal>integration-test</goal>
<goal>verify</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
[...]
</project>
正如您所做的那样,但您应该意识到include
标签适用于源代码(.java)而不是编译名称(。班级)。我不会使用 Category 注释,只是简单地使用命名约定使 pom 更简单、更短。