2010-02-11 135 views
39

使用maven-jar-plugin插件的目標(請參閱here),在使用test-jar目標的maven項目之間共享通用測試代碼是一個明確的解決方案。在maven項目之間共享測試資源

我需要對測試資源做類似的事情,特別是我希望在測試期間項目B的類路徑中可以使用項目A的測試資源。

項目A的一個需要聲明:

<!-- Package and attach test resources to the list of artifacts: --> 
<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-antrun-plugin</artifactId> 
    <executions> 
     <execution> 
      <phase>package</phase> 
      <goals> 
       <goal>run</goal> 
      </goals> 
      <configuration> 
       <tasks> 
        <jar destfile="${project.build.directory}/test-resources.jar"> 
         <fileset dir="${project.basedir}/test-resources" /> 
        </jar> 
       </tasks> 
      </configuration> 
     </execution> 
    </executions> 
</plugin> 
<plugin> 
    <groupId>org.codehaus.mojo</groupId> 
    <artifactId>build-helper-maven-plugin</artifactId> 
    <executions> 
     <execution> 
      <phase>package</phase> 
      <goals> 
       <goal>attach-artifact</goal> 
      </goals> 
      <configuration> 
       <artifacts> 
        <artifact> 
         <file>${project.build.directory}/test-resources.jar</file> 
         <type>jar</type> 
         <classifier>test-resources</classifier> 
        </artifact> 
       </artifacts> 
      </configuration> 
     </execution> 
    </executions> 
</plugin> 

而在B項目將是正常的依賴性:

<dependency> 
    <groupId>myproject.groupId</groupId> 
    <artifactId>myartifact</artifactId> 
    <version>1.0-SNAPSHOT</version> 
    <classifier>test-resources</classifier> 
    <scope>test</scope> 
</dependency> 

問:是否應該在所有情況下工作嗎?沒有maven-antrun-plugin(使用更多'輕量級'插件)是否可以打包資源?

+0

似乎還有需要增強測試資源的遠程資源插件 - http://maven.apache.org/plugins/maven-remote-resources-plugin/index.html – cetnar 2010-02-11 21:35:01

+0

@centar:感謝有趣的插件信息,但是,你所說的是有點偏離主題:) – 2010-02-15 11:09:09

回答

33

只需使用jar:test-jar並將生成的JAR聲明爲依賴項(有關更多詳細信息,請參閱this guide)。雖然我不明白,在這個罐子有資源類的問題,你可以隨時排除所有.class文件:

<project> 
    <build> 
    <plugins> 
    <plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-jar-plugin</artifactId> 
     <version>2.2</version> 
     <executions> 
     <execution> 
      <goals> 
      <goal>test-jar</goal> 
      </goals> 
     </execution> 
     </executions> 
     <configuration> 
     <excludes> 
      <exclude>**/*.class</exclude> 
     </excludes> 
     </configuration> 
    </plugin> 
    </plugins> 
    </build> 
</project> 

,並使用它:

<project> 
    ... 
    <dependencies> 
    <dependency> 
     <groupId>com.myco.app</groupId> 
     <artifactId>foo</artifactId> 
     <version>1.0-SNAPSHOT</version> 
     <type>test-jar</type> 
     <scope>test</scope> 
    </dependency> 
    </dependencies> 
    ... 
</project> 
+0

不應該將執行階段設置爲打包嗎? – sal 2010-02-12 20:00:54

+1

@sal這是因爲'jar:test-jar' *「默認綁定到生命週期階段:'package'。」* – 2010-02-12 20:05:58

+0

@Pascal:謝謝你的提示。我同意,使用類打包資源是有意義的。 +1爲你的答案,但是,原來的問題沒有得到解答(如何以最佳方式單獨打包測試資源?)。 – 2010-02-13 18:17:49

0

已經有一個目標是從maven構建一個test jar

假設你需要一些更靈活的東西,你可以使用jar插件來打包你的測試資源,並用主包目標來執行這個目標。在運行jar目標時

 <plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-jar-plugin</artifactId> 
     <executions> 
      <execution> 
      <phase>package</phase> 
      <goals> 
       <goal>jar</goal> 
      </goals> 
      <configuration> 
       <classifier>test-resources</classifier> 
       <includes> 
       <include>**/*.whatever-you-want</include> 
       </includes> 
      </configuration> 
      </execution> 
     </executions> 
     </plugin> 
任何你想要的捆綁

將被添加到該項目的名稱,版本測試resources.jar。

然後,您可以通過上面使用的相同依賴項將其包含在項目中。

+0

執行'jar'目標會自動將'maven-jar-plugin'綁定到「classes d irectory「,而不是」測試類目錄「。因此,上面將打包簡單的普通類,'include'不會幫助所有測試資源的所有工件。對不起,但是「-1」。 – 2010-02-13 17:36:15