2012-01-05 79 views
14

我已將所有存儲庫配置從我的各種項目中重構爲一個父pom,該父pom是爲具有配置單點配置(例如回購和分配管理)的特定目的而創建的。據我所知,這應該是最佳實踐。在我的父母pom部署到nexus服務器,然後試圖運行我的子項目。他們找不到我的父母。 。 。這種情況對我來說很有意義,因爲在沒有父母的情況下他們不知道關於聯繫回購的情況。 。 。看起來像雞和蛋類的東西?我錯過了明顯的東西嗎?如果在父pom中配置了存儲庫,我的pom如何找到父pom?

回答

7

確實,您的項目需要知道在哪裏可以找到存儲庫來下載它的依賴關係。但在去外部存儲庫之前,Maven會檢查你的本地存儲庫,看看它需要的工件是否在那裏。您的本地存儲庫是否包含父pom?如果沒有,您可以通過運行

mvn install 

在父pom上添加它。這個問題可能是由於直接將父pom部署到Nexus引起的,繞過了本地的問題。您可以通過使用

mvn deploy 

這將首先在本地安裝神器部署今後避免這種情況,然後將其部署到外部存儲庫(的Nexus,你的情況)。更多詳細信息,請參見:http://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html

如果您處於父母pom由其他人構建和部署的情況,這將無濟於事。您可以在項目的pom中或在本地settings.xml中指定存儲庫。一種常見的方法是期望所有開發人員在其本地settings.xml中包含一個指向您的Nexus存儲庫的存儲庫定義,並將其用作所有其他存儲庫的鏡像。然後,您可以在Nexus中配置您需要的每個外部存儲庫,並讓它檢索您需要的任何依賴關係。我不熟悉Nexus,但是可以在這裏找到有關鏡像的更多詳細信息:http://maven.apache.org/guides/mini/guide-mirror-settings.html

+0

謝謝,這有助於。我希望我能找到一個解決方案,這意味着開發人員可以簡單地檢查項目,並構建一切工作。這種「設計無用性」使得settings.xml有點令人討厭,但並不壞;)問題在於scm結構中的父pom位於許多項目之上。某個特定項目的開發人員不希望在父Pom的高度簽出。 。 。也許一些scm技巧是爲了。 – chad 2012-01-06 15:16:50

+0

當然,我自己也遇到過這個問題。可以將父pom放在其他地方,而不是放在svn樹的頂部,並在頂部的另一個pom中定義子模塊。親子關係在Maven中有兩個方面;定義父級允許配置的繼承,並且定義模塊允許構建被聚合。兩者不必一起走 - 你可以把父項目放在其他地方,並在你的svn樹的頂部使用一個新的pom,這樣父項就可以被檢出並自行構建。 – Conan 2012-01-07 19:01:31

4

您必須維護每個子項(maven模塊)的存儲庫定義,這是構建過程中的主要最佳實踐:「使構建便攜式「。

任何開發人員/系統都應該能夠構建任何模塊,而無需父源或其他模塊的源依賴關係,只能使用存儲庫引用。