2012-05-21 98 views
0

我終於成功地讓Maven使用程序集文件將一堆jar壓縮到一起並將其安裝到我的本地存儲庫。這很難......從maven zip組件運行測試

現在我的目標是配置另一個maven項目,這樣當我做「mvn測試」時,它將拉入該zip文件,解壓縮它,並從該zip文件中的罐子運行測試。有誰知道如何做到這一點?

下面是組裝項目的POM:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> 

<modelVersion>4.0.0</modelVersion> 
<groupId>com.pason</groupId> 
<artifactId>RigFocusOnDataHub</artifactId> 
<name>RigFocusOnDataHub</name> 
<version>12.2.0-SNAPSHOT</version> 
<packaging>pom</packaging> 

<dependencies> 
    ... 
</dependencies> 

<build> 
    <plugins> 
     <plugin> 
      <artifactId>maven-assembly-plugin</artifactId> 
      <version>2.3</version> 
      <configuration> 
       <descriptors> 
        <descriptor>RigFocusOnDH.xml</descriptor> 
       </descriptors> 
      </configuration> 
      <executions> 
       <execution> 
        <id>zip</id> 
        <!-- this is used for inheritance merges --> 
        <phase>package</phase> 
        <!-- append to the packaging phase. --> 
        <goals> 
         <goal>single</goal> 
         <!-- goals == mojos --> 
        </goals> 
       </execution> 
      </executions> 
     </plugin> 
    </plugins> 
</build> 

這裏是第二個項目的POM。不幸的是,它並沒有下載RigFocusOnDataHub的zip文件,而是從本地倉庫獲取所有RigFocusOnDataHub依賴關係的jar包。

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 

<modelVersion>4.0.0</modelVersion> 
<groupId>com.pason</groupId> 
<artifactId>RigFocusDHSystemTest</artifactId> 
<version>12.2.0-SNAPSHOT</version> 
<dependencies> 
    <dependency> 
     <groupId>com.pason</groupId> 
     <artifactId>MurphyRigFocus</artifactId> 
     <version>2.0.0-SNAPSHOT</version> 
     <type>test-jar</type> 
    </dependency> 
    <dependency> 
     <groupId>com.pason</groupId> 
     <artifactId>RigFocusOnDataHub</artifactId> 
     <version>12.2.0-SNAPSHOT</version> 
     <type>pom</type> 
    </dependency> 
    <dependency> 
     <groupId>junit</groupId> 
     <artifactId>junit</artifactId> 
     <version>4.8.2</version> 
    </dependency> 
</dependencies> 

<build> 
    <plugins> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-dependency-plugin</artifactId> 
      <executions> 
       <execution> 
        <id>unpack</id> 
        <phase>process-test-classes</phase> 
        <goals> 
         <goal>unpack</goal> 
        </goals> 
        <configuration> 
         <artifactItems> 
          <artifactItem> 
           <groupId>com.pason</groupId> 
           <artifactId>MurphyRigFocus</artifactId> 
           <version>2.0.0-SNAPSHOT</version> 
           <type>test-jar</type> 
           <outputDirectory>${project.build.directory}/tests/MurphyRigFocus</outputDirectory> 
          </artifactItem> 
          <artifactItem> 
           <groupId>com.pason</groupId> 
           <artifactId>RigFocusOnDataHub</artifactId> 
           <version>12.2.0-SNAPSHOT</version> 
           <type>zip</type> 
           <outputDirectory>${project.build.directory}/tests/MurphyRigFocus</outputDirectory> 
          </artifactItem> 
         </artifactItems> 
        </configuration> 
       </execution> 
      </executions> 
     </plugin> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-surefire-plugin</artifactId> 
      <version>2.6</version> 
      <configuration> 
       <testClassesDirectory>${project.build.directory}/tests/MurphyRigFocus</testClassesDirectory> 
       <reportsDirectory>${project.build.directory}/surefire-reports/MurphyRigFocus</reportsDirectory> 
       <includes> 
        <include>**/*IT.*</include> 
       </includes> 
       <argLine>-Djava.library.path=${basedir}/target/classes/</argLine> 
       <forkMode>pertest</forkMode> 
      </configuration> 
     </plugin> 
    </plugins> 
</build> 

+0

爲什麼不把測試作爲構建週期的一部分(在組裝大型.jar之前)? – Attila

+0

這聽起來像你需要有一個單獨的集成測試模塊,處理所有的集成測試的東西,多模塊生成。 – khmarbaise

+0

您嘗試使用maven-surefire插件來運行集成測試,這不是maven-surefire插件的意圖。對於集成測試,使用maven-failsafe插件。 – khmarbaise

回答

1

你將需要:

  1. 從zip提取罐 - 這是Maven的依賴關係的插件很容易
  2. 切傳遞依賴讓你的罐子不要」最終在路徑中兩次 - 你可以在maven-shade-plugin的源代碼中或者在測試項目本身中執行相關性排除
  3. 將jar添加到你的tes t類路徑,有很多方法可以做到這一點,我會嘗試在surefire配置中首先使用其他參數