在Maven多模块项目的测试阶段之前启动Jetty

时间:2012-10-08 15:05:39

标签: java maven jetty overlays

我在一个多模块Maven项目(比如foo-web)中有一个WAR模块,它实现了一个Web服务。然后我有一个foo-cli,它实现了一个Web服务客户端并在几个单元测试中测试它。

为了使其正常工作,我在测试阶段之前以这种方式启动Jetty:

<dependency>
  <groupId>${project.groupId}</groupId>
  <artifactId>foo-web</artifactId>
  <version>${project.version}</version>
  <type>war</type>
  <scope>test</scope>
</dependency>         
...
<plugin>
<groupId>org.mortbay.jetty</groupId>
<artifactId>jetty-maven-plugin</artifactId>
<version>8.1.5.v20120716</version>
   <configuration>

     <scanIntervalSeconds>10</scanIntervalSeconds>
     <useTestScope>true</useTestScope>
     <connectors>
       <connector implementation="org.eclipse.jetty.server.nio.SelectChannelConnector">
         <port>8080</port>
         <maxIdleTime>60000</maxIdleTime>
       </connector>
     </connectors>
   </configuration>

<executions>
    <execution>
      <id>start-jetty</id>
      <phase>process-test-classes</phase>
      <goals>
        <goal>run</goal>
      </goals>
      <configuration>
        <scanIntervalSeconds>0</scanIntervalSeconds>
        <daemon>true</daemon>
      </configuration>
    </execution>
   </executions>          
</plugin>

当我在foo-cli模块中运行'mvn test'时,这非常有效(它甚至可以自动停止,无需指定任何其他内容)。但是,当我尝试从上面(foo)并从那里发出'mvn test'时,即,我尝试对项目中的所有模块运行所有测试,它失败了'404 - not found'。从输出中,我可以看到叠加(战争依赖)似乎完全被忽略了。

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:4)

您应该尝试将集成测试移至顶级项目。这样它将在构建WAR工件之后运行。

你看过Maven Failsafe Plugin了吗?它专为你正在做的事情而设计,实际上是集成测试,而不是单元测试。该页面提供了一些很好的建议,说明为什么您可能希望使用integration-test阶段进行集成测试。

即,它描述了您可能希望在start-jetty期间执行pre-integration-test等等,以便您可以适当地将其全部拆除。