2009-11-12 165 views
69

我使用maven構建多模塊項目。我的模塊2依賴於模塊1 src在編譯範圍和模塊1在測試範圍內測試。多模塊項目中的Maven測試依賴項

模塊2 -

<dependency> 
     <groupId>blah</groupId> 
     <artifactId>MODULE1</artifactId> 
     <version>blah</version> 
     <classifier>tests</classifier> 
     <scope>test</scope> 
    </dependency> 

這工作得很好。說我的模塊3依賴於Module1 src並在編譯時進行測試。

模塊3 -

<dependency> 
     <groupId>blah</groupId> 
     <artifactId>MODULE1</artifactId> 
     <version>blah</version> 
     <classifier>tests</classifier> 
     <scope>compile</scope> 
    </dependency> 

當我運行mvn clean install,我的構建運行,直到模塊3,在模塊3失敗,因爲它無法解析模塊的測試依賴。然後,我單獨在模塊3上執行mvn install,然後在父pom上返回並運行mvn install以使其生成。我怎樣才能解決這個問題?

+0

請問你能分享一下你父母的樣子嗎? – 2009-11-12 23:51:37

回答

104

我對你正在嘗試做什麼有疑問,但是我會假設你想要在另一個項目中重用爲一個項目(module1)創建的測試。截至Guide to using attached tests底部的說明解釋:

注意,本指南的以前版本建議使用<classifier>tests</classifier>而不是<type>test-jar</type>。雖然這在當前情況下適用於某些情況,但如果調用安裝前的生命週期階段,則它在測試JAR模塊的反應器構建和任何使用者期間無法正常工作。在這種情況下,Maven不會從反應堆構建的輸出中解析測試JAR,而是從本地/遠程庫中解析測試JAR。顯然,來自倉庫的JAR可能已經過時或完全缺失,導致構建失敗(參見MNG-2045)。

因此,首先,要打包編譯測試在JAR和部署它們一般重複使用,配置maven-jar-plugin如下:

<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> 
    </plugin> 
    </plugins> 
    </build> 
</project> 

然後,安裝/部署測試JAR神器如常(使用mvn installmvn deploy)。

最後,使用測試JAR,您應該指定一個特定類型的test-jar的依賴:

<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> 
+3

帕斯卡。首先非常感謝您回答所有Maven問題! 關於這個問題。我仍然有問題。我在我想用於所有子對象的核心模塊之一中有一些testBase類。 我們現在已經有了我們CI中的maven構建。如果我不想做任何安裝部署到測試jar,只是從中繼簽出新的副本並運行mvn測試。 這失敗了,因爲我沒有任何地方的測試jar。 任何想法如何處理? – Roman 2010-03-28 09:49:33

+0

@Roman運行安裝是「自然」的方式。但它看起來像你找到了一個解決方法。 – 2010-03-28 13:30:17

+0

它似乎是這個問題3559而不是2045這是在這一點上:http://jira.codehaus.org/browse/MNG-3559 – HDave 2013-08-14 16:31:14

15

關於我到帕斯卡的問題,我想我已經找到了stuitable答案評論:

<plugins> 
    <plugin> 
     <artifactId>maven-jar-plugin</artifactId> 
     <version>2.2</version> 
     <executions> 
      <execution> 
      <goals> 
       <goal>test-jar</goal> 
      </goals> 
      <phase>test-compile</phase> 
     </execution> 
     </executions> 
     <configuration> 
      <outputDirectory>${basedir}\target</outputDirectory> 
     </configuration> 
    </plugin> 
</plugins> 

這裏您看到的主要區別在於<phase>標記。

我將創建測試jar,它將在測試的編譯階段可用,而不僅僅在軟件包階段之後。

適合我。

+1

感謝提示@羅曼這已經非常有用。 – 2010-11-18 12:13:48

+1

是的,非常方便。感謝分享。我想只有當你有公司目錄時,部署方法纔會更好(是的,我知道這是強烈建議的)。感謝@羅曼 – Damien 2010-12-02 21:04:28

相關問題