2012-08-13 44 views
1

我有多模塊maven項目,主項目依賴於子模塊。子模塊的每個依賴關係都由以下版本定義:${pom.version}。我使用Maven發佈插件。如果我嘗試準備發佈,我有關於子模塊版本丟失的錯誤。多模塊應用程序maven

例子:

主要POM是1.0版本,我嘗試將其釋放。 Maven將每個子模塊構建到版本1.1,然後嘗試構建父代,然後崩潰。因爲找不到sub-module-1.1

我不知道如何告訴maven構建,並立即安裝到local-repo構建的每個子模塊。我使用maven2。

我POM:

<modelVersion>4.0.0</modelVersion> 

<groupId>com.voncuver</groupId> 
<artifactId>voncuver</artifactId> 
<packaging>pom</packaging> 
<version>1.1-SNAPSHOT</version> 
<name>multimodule</name> 

<modules> 
    <module>mod1</module> 
    <module>mod2</module> 
</modules> 

(...) 

<dependencyManagement> 
    <dependencies> 
     <dependency> 
      <artifactId>mod1</artifactId> 
      <groupId>com.voncuver</groupId> 
      <version>${pom.version}</version> 
     </dependency> 
     <dependency> 
      <artifactId>mod2</artifactId> 
      <groupId>com.voncuver</groupId> 
      <version>${pom.version}</version> 
     </dependency> 
    </dependencies> 
</dependencyManagement> 
(...) 
+0

您是否明確將每個子模塊的版本設置爲$ {pom.version}?版本屬性繼承自父... – 2012-08-13 14:41:04

+3

首先你可以發佈你的pom的(摘錄是好的)此外不要使用pom.version更好的是project.version – khmarbaise 2012-08-13 14:43:13

+1

發佈插件會自動更新反應器內的依賴版本,所以實際上沒有必要引用$ {project.version}也請記住,@khmarbaise表示$ {pom.version}不贊成使用$ {project.version} – 2012-08-14 08:10:05

回答

1

你或許應該張貼多一點你的項目結構,但通常一個多模塊項目如下:

project 
    mod1 
    mod2 
    mod3 
    pom.xml 

主要的pom.xml會有「 pom「包裝類型,並且在其中有一個部分用於構建其他部分:

<packaging>pom</packaging> 
<modules> 
    <module>mod1</module> 
    <module>mod2</module> 
    <module>mod3</module> 
</modules> 

N,最可靠的方法,以確保一切建立正確的執行:

MVN全新安裝

沒有「安裝」,這是極有可能的事情可能不會在Maven反應堆被發現,尤其取決於你使用的maven版本(以及其他一些因素)。

+0

OP有'maven問題-release-plugin',它比運行'mvn install'複雜得多。我不確定這個答案會有多大幫助,因爲這個問題不太清楚。目前,我將downvote,對不起... – maba 2012-08-13 13:47:41

+0

@maba我的觀點是釋放插件或沒有,沒有足夠的信息關於他的項目結構任何人給予任何幫助。我只是提出了結構應該是什麼樣子,以防它不是相對「標準」的。 – Matt 2012-08-13 17:11:26

+0

運行'mvn release:perform'將執行預定義的Maven階段'mvn deploy',它將自動執行'mvn install'。 – yorkw 2012-08-13 21:48:42