2012-12-10 165 views
0

在我最近的項目中介紹給Maven後,過去幾周我一直在嘗試使用它。獨立構建Maven子模塊

我目前在我的開發環境中有一個多模塊項目。項目「A」和項目「B」是項目的「根」的子模塊,具有對A.

依賴B I我知道,我可以用mvn reactor:make...所概述here建立乙獨立。但是,我很好奇爲什麼我不允許從B的根文件夾中創建B.

爲了說明這一點,我首先通過在A的根目錄下運行clean install來獨立構建A.然而,當我試着做從B的根目錄相同的動作,Maven的報道如下錯誤 -

Could not find artifact org.divesh.mavenrnd:root:pom:1.0 in central 

它看起來像Maven是不能夠解決家長的POM文件。任何想法爲什麼發生這種情況?從我對Maven多模塊項目的最初理解中,將項目拆分爲子模塊的主要原因是共享依賴關係。但是,這不應該阻止我從其文件夾中獨立構建特定的模塊。

謝謝。

編輯

然的mvn -N clean install在代表只安裝根項目的POM。在此之後,我能夠編譯和安裝A.後,成功地構築b,則仍然有一件事我不是很清楚 - 假設我已經安裝了根項目的POM在資源庫中,如果我嘗試建立一個,它指的是直接在它上面的父根POM還是在存儲庫中安裝的POM?

回答

1

您應該使用MVN -pl ProjectToBuild生命週期像從樹的根:

mvn -pl module-b package 

你不應該使用MVN反應器:做了。除非你正在使用maven 2。0

如果你wan't,以確保一切都取決於模塊b爲建設以及你應該使用:

mvn -amd -pl module -b package 

最好是具有代表的相應結構的文件夾的佈局項目和不使用relativePath是必要的。

+0

這適用於我。除了這個答案:如果你還想建立'-pl'列表中項目所需的項目,可以使用'-am' **(也是make)**選項。在上面的問題中,由於B依賴於A,而不是先構建A,我們可以使用'mvn -am -pl B install'。 –

3

沒錯。你提到的錯誤告訴你,maven找不到父母的pom。

你有2個選擇這裏:

  1. 首先調用mvn -N install在你的項目根目錄來安裝父POM到本地存儲庫。然後你可以去B的目錄並建立子模塊。
  2. 指定的子模塊POM <relativePath>。默認情況下,maven將只在文件系統的上一級查找父級pom。如果您的項目有其他的目錄結構,你必須指定爲了讓行家找到你的父POM這個選項。

這裏有一個例子:

<parent> 
    <groupId>...</groupId> 
    <artifactId>...</artifactId> 
    <version>...</version> 
    <relativePath>../../pom.xml</relativePath> 
</parent> 
+0

編輯我的問題回答你的答案。謝謝。 –