cargo maven
幸运的是,Maven在默认构建生命周期的以下阶段(来自Maven 文档 )具有对这一确切方案的内置支持:
- 集成前测试 : 执行集成测试之前所需的操作。 这可能涉及诸如设置所需环境的事情。
- 集成测试 : 如有必要,将程序包处理并部署到可以运行集成测试的环境中。
- 集成测试后 : 执行集成测试后执行所需的操作。 这可能包括清理环境。
首先,配置了maven-surefire-plugin ,以便从标准构建生命周期中排除集成测试 :
<plugin><groupId>org.apache.maven.plugins<groupId><artifactId>maven-surefire-plugin<artifactId><version>2.10<version><configuration><excludes><exclude>***IntegrationTest.java<exclude><excludes><configuration><plugin>
排除是通过蚂蚁风格的路径表达式完成的,因此所有集成测试都必须遵循此模式,并以“ IntegrationTest.java ”结尾。
接下来,使用cargo-maven2-plugin ,因为Cargo提供了对嵌入式Web服务器的顶级支持。 当然,如果服务器环境需要特定的配置,货运也知道如何从已归档的软件包中构造服务器以及如何部署到外部服务器。
<plugin><groupId>org.codehaus.cargo<groupId><artifactId>cargo-maven2-plugin<artifactId><version>1.1.3<version><configuration><wait>true<wait><container><containerId>jetty7x<containerId><type>embedded<type><container><configuration><properties><cargo.servlet.port>8080<cargo.servlet.port><properties><configuration><configuration><plugin>
定义了一个嵌入式Jetty 7 Web服务器,侦听端口8080。请注意,将等待标记设置为true –这是因为对于较新版本的货物(1.1.0以上),该标记的默认值已从更改为由于此错误 ,从true到false 。 我们希望能够通过简单地运行mvn cargo:start来启动项目,尤其是在开发阶段,因此该标志应该处于活动状态。 但是,在运行集成测试时,我们希望服务器启动,先运行测试再停止,这就是为什么该标志以后会被覆盖的原因。
为了使包 maven阶段生成可部署的war文件,项目的打包必须为: <packaging> war </ packaging> 。
接下来, 将创建一个新的集成 Maven配置文件 ,以仅在该配置文件处于活动状态时才允许运行集成测试,而不是将其作为标准构建生命周期的一部分。
<profiles><profile><id>integration<id><build><plugins>...<plugins><build><profile><profiles>
该配置文件将包含所有其余配置。
现在,Jetty服务器已配置为在集成前测试阶段启动 ,并在集成后 测试阶段停止 。
<plugin><groupId>org.codehaus.cargo<groupId><artifactId>cargo-maven2-plugin<artifactId><configuration><wait>false<wait><configuration><executions><execution><id>start-server<id><phase>pre-integration-test<phase><goals><goal>start<goal><goals><execution><execution><id>stop-server<id><phase>post-integration-test<phase><goals><goal>stop<goal><goals><execution><executions><plugin>
这样可以确保在集成测试阶段之前和之后都执行cargo:start目标和cargo:stop目标。 请注意,因为有两个单独的执行定义,所以id元素必须在两个元素中都存在(并且不相同),以便Maven可以接受配置。
接下来,需要在集成配置文件中覆盖maven-surefire-plugin配置,以便现在将包含并运行默认生命周期中排除的集成测试:
<plugins><plugin><groupId>org.apache.maven.plugins<groupId><artifactId>maven-surefire-plugin<artifactId><executions><execution><phase>integration-test<phase><goals><goal>test<goal><goals><configuration><excludes><exclude>none<exclude><excludes><includes><include>***IntegrationTest.java<include><includes><configuration><execution><executions><plugin><plugins>
有几件事值得注意:
1. Maven-surefire-plugin的测试目标是在集成测试阶段执行的; 至此,Jetty已经开始部署项目,因此集成测试应该没有问题。
2.现在,集成测试包含在执行中。 为了实现这一点,排除项也被覆盖-这是因为Maven处理配置文件中的覆盖插件配置的方式。 基本配置没有被完全覆盖,而是在配置文件中增加了新的配置元素。 因此,最初排除集成测试的原始<excludes>配置仍然存在于配置文件中,并且需要被覆盖,否则它将与<includes>配置冲突并且测试仍然不会跑。
3.请注意,由于只有一个<execution>元素,因此不需要定义id 。
现在,整个过程可以运行:
mvn clean install -Pintegration
结论
Maven的分步配置涵盖了整个集成过程的设置过程,该集成过程是项目生命周期的一部分。
通常,将其设置为在持续集成环境中运行,最好在每次提交之后运行。 如果CI服务器已经有运行和使用端口的服务器,那么货物配置将必须处理该情况,我将在以后的文章中介绍。
参考: 如何在baeldung博客上使用我们的JCG合作伙伴 Eugen Paraschiv 的Maven Cargo插件设置集成测试 。
翻译自: https://www.javacodegeeks.com/2012/09/maven-cargo-plugin-for-integration.html
cargo maven