2012-09-06 80 views
2

我有一個複雜的項目結構是這樣的:用竹片搭建的Subversion/Maven項目定義父POM(S)

- root (no pom) 
    - parent(parent pom.xml) 
    + project A (pom.xml) 
    + project B (pom.xml) 
    - project C (pom.xml) 
     - subproject 1 (pom.xml) 
     - subproject 2 (pom.xml) 
    + project N (pom.xml) 

我需要用竹服務器建立subproject 2。我使用Bamboo來結算subproject 2代碼,但是當我運行mvn install時,它失敗並顯示「Non-resolvable parent POM」消息。

當所有代碼位於單個位置時,構建運行正常。我不想在root級別簽出代碼,因爲有很多項目我不想簽出(在我的示例中,這將是項目A,B,N和子項目1)

我試圖檢查代碼3次爲父,項目C/POM和子項目2,但代碼被放置到彼此沒有關係的單獨的目錄,所以沒有太多的幫助那裏

PS 我沒有使用模塊,雖然我嘗試過使用模塊,但沒有任何區別。我沒有發佈實際的POMs,因爲這些都非常微不足道,基本上pom有parent元素,這就是所有的關係。

所有的上游項目部署到本地和遠程回購

+0

這是一個多模塊構建,其中在項目-A,子項目1等中使用父項? – khmarbaise

+0

不是真的 - 這僅限於指向父pom的子pom。在我的情況下,它是sub2.pom-> projC.pm - > ../ parent.pom – Bostone

+0

您的其他項目(例如,A和子1)已經建立在別的地方嗎? –

回答

2

MVN會尋找依賴在三個地方,在本地文件系統上的相對路徑,在M2回購緩存在本地計算機上,或在一個外部回購。如果你在竹子可以訪問的倉庫上安裝所有的依賴關係,你的構建可能會工作。

爲了在本地機器上測試這個功能,你可以從根目錄下執行mvn install(把所有依賴關係放在你的機器上的m2 repo中),然後在一個單獨的目錄中檢出subproject2,然後mvn install subproject2 ?

如果可行,那麼子項目2的依賴關係需要放在一個可以訪問的maven倉庫中。在用mvn安裝竹之前,使用artifactory之類的東西部署它們。

+0

「整棵樹」是什麼意思?在我的本地機器上,我可以毫無問題地構建這個項目。我認爲Bamboo的問題在於它將3個項目拖入不相關的獨立目錄,然後在構建開始時找不到父POM – Bostone

+0

更新我的答案 – sbridges

+0

只需重申 - 所有向上依賴關係都已部署到repo,但是當Bamboo嘗試在子項目上執行「mvn install」,它會抱怨父依賴項丟失 – Bostone

1

我們有一個非常類似的項目結構,我剛剛證實我能夠創建一個Jenkins作業,只檢出subproject1的等價物並使用mvn -U clean install來構建它。我無法訪問Bamboo實例,但Jenkins和Bamboo只是在引擎蓋下調用Maven,所以在這裏應該沒有區別。

正如您所提到的那樣,另一個可用的選項是檢出整個存儲庫(或包含根和所有模塊的目錄)並在父POM上運行mvn -U clean install -pl subproject1 -am

爲了幫助您,我們確實需要更多信息。您在其中一條評論中提到「所有[上游]依賴關係已被部署到回購」。你是指你的本地存儲庫(即.m2/repository)?您應該仔細檢查該目錄是否包含所有父POM。您是否解決代理(即Artifactory/Nexus)中的所有工件?如果是這樣,請檢查POM是否可用。

您當前的結構圖不顯示POM的位置。我假設你已經正確設置了它,但是我已經看到了人們將子模塊放在奇怪位置的情況,這可能會導致問題。 relative locations of the POMs matter(除非你做一些定製)。您可以在根上運行tree並清理輸出,以便我們確切知道您的POM在哪些方面與另一個相關?例如:

parentProject 
|-- projectA 
| |-- pom.xml 
| 
|-- projectB 
| |-- pom.xml 
| | 
| |-- subProject1 
| | |-- pom.xml 
| |  
| |-- subProject2 
|  |-- pom.xml 
| 
|-- pom.xml 

最後,你能瀏覽到子項目/模塊你試圖建立和發佈的mvn help:effective-pom輸出?

+0

在我的(原始)圖中,每個節點(和葉)都包含pom.xml。在頂層沒有pom.xml,因爲您看到與A和B處於同一級別的「父級」目錄以及來自A,B,C ... N的「父級」目錄被稱爲「../parent」。所有上游項目都部署在本地和遠程回購站中 – Bostone

0

每個maven模塊都應該是獨立的,使用相對鏈接來說明../parent打破了這個設計。

嘗試並通過GAV屬性明確定義父母,然後確保這些poms在您當地的maven回購中受版權保護,您將能夠構建子項目。

我們運行15個模塊建立3個級別,這是所有可能的。

你遇到的唯一問題是當你碰撞版本時,你將不得不開始安裝root pom文件來推動解析過程。