我想启动一个兄弟maven 3模块,它在我的一个maven模块中充当应用服务器,以对系统运行集成测试。
我的maven项目看起来与此相似:
现在我想在maven的预集成测试阶段启动“模块A”,然后运行模块B中包含的所有集成测试。我设法在模块B中运行集成测试,但没有找到“光滑” “在预集成测试阶段启动模块B的方法。
这样做的最佳做法是什么?使用mojo-exec插件?如何配置?使用“脏”shell脚本并为模块A执行mvn run?
修改
我不想在预集成测试阶段启动应用程序服务器,但想要运行maven模块(它本身启动了mojo-exec-plugin)。运行意味着启动打包(工作)模块的Main类!
答案 0 :(得分:5)
尝试使用绑定到安装阶段的maven-exec-plugin的java目标:
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>1.2.1</version>
<executions>
<execution>
<id>start-app</id>
<phase>install</phase>
<goals>
<goal>java</goal>
</goals>
</execution>
</executions>
<configuration>
<mainClass>com.example.Main</mainClass>
<arguments>
<argument>argument1</argument>
...
</arguments>
<systemProperties>
<systemProperty>
<key>myproperty</key>
<value>myvalue</value>
</systemProperty>
...
</systemProperties>
</configuration>
</plugin>
答案 1 :(得分:-1)
首先,您应该将集成测试放在一个模块中,让我们假设您使用模块A,而不是您应该在同一模块上运行集成测试阶段,而不是在不同的模块中。
您可以使用cargo-plugin在预集成测试阶段为应用服务器启动,通过maven-failsafe-plugin运行集成测试,并在集成后测试期间关闭applcation服务器通过货物插件。 以下是配置cargo plugin以启动/停止tomcat服务器的片段,但货物也支持JBoss,Glassfish等。
<plugin>
<groupId>org.codehaus.cargo</groupId>
<artifactId>cargo-maven2-plugin</artifactId>
<version>1.0.5</version>
<configuration>
<wait>false</wait>
<container>
<containerId>tomcat${tomcat.major}x</containerId>
<zipUrlInstaller>
<url>http://www.apache.org/dist/tomcat/tomcat-${tomcat.major}/v${tomcat.version}/bin/apache-tomcat-${tomcat.version}.tar.gz</url>
<installDir>${installDir}</installDir>
</zipUrlInstaller>
<output>${project.build.directory}/tomcat${tomcat.major}x.log</output>
<log>${project.build.directory}/cargo.log</log>
</container>
<configuration>
<home>${project.build.directory}/tomcat-${tomcat.version}/container</home>
<properties>
<cargo.logging>high</cargo.logging>
<cargo.servlet.port>9080</cargo.servlet.port>
<cargo.jvmargs>-DHUDSON_HOME=${project.build.directory}/hudson-storage</cargo.jvmargs>
</properties>
</configuration>
</configuration>
<executions>
<execution>
<id>start-container</id>
<phase>pre-integration-test</phase>
<goals>
<goal>start</goal>
<goal>deploy</goal>
</goals>
<configuration>
<deployer>
<deployables>
<deployable>
<groupId>org.jvnet.hudson.main</groupId>
<artifactId>hudson-war</artifactId>
<type>war</type>
<pingURL>http://localhost:9080/hudson</pingURL>
<pingTimeout>60000</pingTimeout>
<properties>
<context>hudson</context>
</properties>
</deployable>
</deployables>
</deployer>
</configuration>
</execution>
<execution>
<id>stop-container</id>
<phase>post-integration-test</phase>
<goals>
<goal>stop</goal>
</goals>
</execution>
</executions>
</plugin>
以下代码段给您一个如何使用maven-surefire插件和编译器插件的印象:在这种情况下重要的是命名集成测试(如XYZ * IT.jav)
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.3.2</version>
<executions>
<execution>
<goals>
<goal>testCompile</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-failsafe-plugin</artifactId>
<version>2.6</version>
<executions>
<execution>
<id>integration-test</id>
<goals>
<goal>integration-test</goal>
</goals>
</execution>
<execution>
<id>verify</id>
<goals>
<goal>verify</goal>
</goals>
</execution>
</executions>
</plugin>
您不需要exec插件等或shell脚本来在maven中运行集成测试。