2010-12-14 84 views
12

我目前有大約16個項目,我用maven部署到組成類似「門戶」的相同應用程序服務器。我已經構建了一個父pom來處理常見的依賴和插件配置。目前,我的SVN結構看起來類似於:多模塊maven項目與父pom和svn佈局

portal_root 
    +project1 
     +tags 
     +branches 
     +trunk 
    +project2 
     . 
     . 
     . 
    +projectn 
    pom.xml 

單獨的項目是分別部署的。也就是說,project1沒有對project2的依賴,並且每個都可以進行修改和部署,而無需修改其他任何東西。

這提出了一個SVN的問題,好像另一個開發人員想要檢查出整個「門戶」根目錄(也獲得父pom),他們也會默認下拉所有標籤和分支的副本!不是很理想。

我能想到的唯一的另一件事就是用這樣的:

portal_root 
    +tags 
    +branches 
    +trunk 
     +project1 
       +src 
       pom.xml 
     +project2 
      . 
      . 
      . 
     pom.xml 

不過,現在所有的項目更改都將在標籤文件夾跟蹤。這對我來說不是一個大問題,但分枝現在似乎變成一種痛苦。

我目前也在努力將TeamCity連接到這裏,因爲我只需要看一個單獨的目錄(例如標籤)來捕捉需要構建的所有東西,現在這會更容易一些。我也將工件部署到企業Nessus存儲庫。

我希望有人能給我一些建議,因爲我一直無法找到任何體面的文檔,談論整個生命週期和最佳實踐。

我喜歡用單個maven命令構建和部署所有項目的想法。我也喜歡在一個地方擁有所有常見的依賴項,存儲庫信息和插件信息。

回答

25

您可以使用下面的佈局:

+parent-project 
    pom.xml 
+child-project-1 
    pom.xml 
+child-project-2 
    pom.xml 

在父項目的pom地址:

<modules> 
    <module>../child-project-1</module> 
    <module>../child-project-2</module> 
</modules> 

在兒童中的項目POM添加:

<parent> 
    <artifactId><!-- parent artifactId --></artifactId> 
    <groupId><!-- parent groupdId --></groupId> 
    <version><!-- parent version --></version> 
    <relativePath>../parent-project</relativePath> 
</parent> 

兒童的項目可以選擇依賴。

以下鏈接還可以幫助:

+0

這完全解決了我的問題!謝謝! – Casey 2010-12-14 19:46:03

+0

如果要在子項中使用父項目,請確保將父數據作爲依賴項添加。 – cevaris 2013-12-09 18:40:15

4

約翰斯的方法的一個變化是使用svn:externals掛鉤適當的主幹/標籤/你的子項目在樹枝上您父項目的適當中繼線/標記/分支。通過這種方式檢查你的父母的一個變體會取出所有其他項目的正確版本。

只有在合理檢查所有項目的情況下才有意義。

+0

對我的方法發表評論會更有幫助,而不僅僅是默默無聞地退縮。考慮到這種方法在過去的四年中一直在幫助我們處理幾個客戶特定的版本,同時最大限度地減少代碼差異,所以我有興趣知道我一直在做錯什麼。 – 2013-10-18 08:31:07

+1

我認爲svn:externals真的很聰明,特別是在大型企業svn回購站。這樣,您可以根據需要將Maven目錄佈局綁定在一起,而無需更改整個回購結構。 – Sylar 2015-09-09 07:59:54