4

我正在爲一個大小合適的Web項目建立一個集成測試模塊。集成測試模塊與Web項目本身是分開的,並且它擁有自己的pom。如何使jetty-maven-plugin部署從存儲庫檢索到的戰爭?

想法是使用maven-soapui插件發送請求並驗證響應。設置soapui-plugin並不麻煩。但是,我在解決如何告訴jetty-maven插件從遠程存儲庫部署戰爭方面遇到麻煩。

如果我理解正確,jetty-maven-plugin具有一個名爲'< webApp>/< webApp>'的屬性,該屬性允許指定要部署的war文件。問題是戰爭文件不存在於模塊本身。

我聽說我可以使用Maven Assembly插件通過項目artifactId從存儲庫中檢索戰爭,但我還沒有弄清楚我會如何去做。

這裏有我想要的一個總結:

  1. 通過其檢索的artifactId從倉庫或類似的特定戰爭的例子所示。
  2. 將這場戰爭部署到jetty-maven-plugin(目標部署 - 戰爭?)
  3. 獲取maven-soapui-plugin以運行測試並將結果報告回集成測試階段。

我敢肯定,我已經得到了第3步覆蓋,但我很不清楚如何實現步驟1和2

任何幫助是極大的讚賞

回答

5

這是也許可能使用dependency:copy來檢索戰爭,解壓縮它,並使用maven jetty插件來完成整個工作,但這會很冒險並且有點醜陋。更清潔的解決方案是使用Maven Cargo plugin,這是我的建議。下面,展示瞭如何使用其座標檢索WAR神器以及如何樣POM部署它使用貨物嵌入式Jetty容器:

<dependencies> 
    <dependency> 
    <groupId>war group id</groupId> 
    <artifactId>war artifact id</artifactId> 
    <type>war</type> 
    <version>war version</version> 
    </dependency> 
    ... 
</dependencies> 
... 
<build> 
    <plugins> 
    <plugin> 
     <groupId>org.codehaus.cargo</groupId> 
     <artifactId>cargo-maven2-plugin</artifactId> 
     <configuration> 
     <!-- Container configuration --> 
     <container> 
      <containerId>jetty6x</containerId> 
      <type>embedded</type> 
     </container> 
     <!-- Configuration to use with the container or the deployer --> 
     <configuration> 
      <deployables> 
      <deployable> 
       <groupId>war group id</groupId> 
       <artifactId>war artifact id</artifactId> 
       <type>war</type> 
       <properties> 
       <context>war context</context> 
       </properties> 
      </deployable> 
      </deployables> 
     </configuration> 
     <!-- Don't wait, execute the tests after the container is started --> 
     <wait>false</wait> 
     </configuration> 
     <executions> 
     <execution> 
      <id>start-container</id> 
      <phase>pre-integration-test</phase> 
      <goals> 
      <goal>start</goal> 
      </goals> 
     </execution> 
     <execution> 
      <id>stop-container</id> 
      <phase>post-integration-test</phase> 
      <goals> 
      <goal>stop</goal> 
      </goals> 
     </execution> 
     </executions> 
    </plugin> 
    ... 
    </plugins> 
    ... 
</build> 

最後,只要綁定在integration-test階段的soapUI插件。

+0

嗨帕斯卡。謝謝你的提示。這看起來正是我所追求的。再次感謝! :-) – John 2010-04-20 20:33:19

+0

@John不客氣。參數部署的 – 2010-04-20 20:45:42

+0

:無法在類org.codehaus.cargo.maven2.configuration.Configuration中找到'deployables' 對於貨物版本1.4.12,標籤deployable已超出配置。 http://stackoverflow.com/a/18061722/1488761 – 2015-02-02 19:59:02

4

我正在做同樣的事情,約翰,但我採取了與Jetty插件不同的方法。我認爲最終的結果是一樣的。我正在開發一個集成測試套件,以針對多個Web服務WAR進行運行。我在package階段使用dependency:copy然後的<contextHandler/>一個表S配置爲maven-jetty-plugin

<project> 
    … 
    <build> 
     <plugins> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-dependency-plugin</artifactId> 
       <executions> 
        <execution> 
         <id>copy-wars</id> 
         <phase>package</phase> 
         <goals> 
          <goal>copy</goal> 
         </goals> 

         <configuration> 
          <outputDirectory>${project.build.directory}/wars-to-be-tested</outputDirectory> 
          <stripVersion>true</stripVersion> 
          <artifactItems> 
           … 
           <artifactItem> 
            <groupId>groupId</groupId> 
            <artifactId>artifactId</artifactId> 
            <version>version</version> 
            <type>war</type> 
           </artifactItem> 
           … 
          </artifactItems> 
         </configuration> 
        </execution> 
       </executions> 
      </plugin> 

      <plugin> 
       <groupId>org.mortbay.jetty</groupId> 
       <artifactId>jetty-maven-plugin</artifactId> 
       <version>7.1.3.v20100526</version> 
       <configuration> 
        … 
        <contextHandlers> 
         … 
         <contextHandler implementation="org.mortbay.jetty.plugin.JettyWebAppContext"> 
          <war>${project.build.directory}/wars-to-be-tested/artifactId.war</war> 
          <contextPath>/context</contextPath> 
         </contextHandler> 
        </contextHandlers> 
       </configuration> 

       <executions> 
        <execution> 
         <id>start-jetty</id> 
         <phase>pre-integration-test</phase> 
         <goals> 
          <goal>stop</goal> 
          <goal>run</goal> 
         </goals> 
         <configuration> 
          <scanIntervalSeconds>0</scanIntervalSeconds> 
          <daemon>true</daemon> 
         </configuration> 
        </execution> 

        <execution> 
         <id>stop-jetty</id> 
         <phase>post-integration-test</phase> 
         <goals> 
          <goal>stop</goal> 
         </goals> 
        </execution> 
       </executions> 
      </plugin> 
     </plugins> 
    </build> 
</project> 

我寧願聲明歷次戰爭的依賴關係,然後利用dependency:copy-dependencies成立wars-to-be-tested目錄;這將允許Maven反應堆發現它需要在它將要測試的戰爭之後構建我的集成測試模塊。我遇到的問題是,Jetty插件認爲我想「覆蓋」所有列爲依賴關係的戰爭(這是一個我從未聽說過的概念,直到我看到它發生);我不知道是否允許這種事情發生會傷害任何東西,但我不喜歡它,所以我採用了dependency:copy方法。

這只是使用Cargo的替代方案。我會自己研究,但我只是想提供另一種方式。