2009-10-17 85 views
4

相反,一個「正常」的svn目錄結構,我用以下結構:從一個不尋常的svn目錄結構遷移到maven?

 
trunk/ 
    project1/ 
    project2/ 
    project3/ 
    ... 
branches/ 
    project1-branch/ 
    project1/ 
    project2/ 
    ... 
    project2-branch/ 
    project1/ 
    project2/ 
    ... 
tags/ 
    project1/ 
    V1 
    V2 
    ... 

正如你看到的,我沒有爲每個項目單獨的三元組(主幹/分支/標籤)。

對於開發,我做了一個包含我需要的所有項目(有項目之間的依賴關係,有些項目只是庫)的trunk(有時是一個稀疏檢出)的結帳。

,我在這看到的好處是:

  • 更新和簽入是容易的,因爲我有所有項目的一個共同的根目錄下(幹線)。一個簡單的svn updatesvn commit就可以做到。

  • 標籤或分支的創建很簡單,因爲它只是我必須爲此設置的主幹svn copy。 (分行和標籤實際上包含比需要更多的項目,而是一個svn copy是便宜的,如果需要,我仍然可以在一個分支或標記做稀疏檢出。)

  • 從一個項目移動到另一個資源是很容易的,因爲他們都住在同一個存儲庫中。

  • 因爲我可以肯定我不會錯過一個項目,所以全局重構(例如更改常用類的包)很容易。

  • 合併很容易,因爲即使存在從一個項目到另一個項目的重構移動,我總是可以一次合併整個分支。


我打算遷移到Maven和拆分都從主幹的項目Maven項目。我想從maven依賴管理和可用插件中獲益(現在我正在使用巨大的自定義ant文件)。

現在我的問題是:

  • 我必須改變SVN目錄結構來給每個項目自身的三重(主幹/分支/標籤)?我想答案是'是'。

  • 如果我改變了結構,上面提到的哪些好處是否會鬆動(我的意思是用maven做什麼會更復雜)?

  • 什麼是與maven做同樣的方法?

回答

13

有沒有這樣的東西, 「正常」的svn目錄結構。還有如Version Control with Subversion書(甚至/trunk/tags/branches名都只是慣例,有一個標籤與分支沒有區別,只是在你對他們的看法)的the section called "Planning Your Repository Organization"討論了不同的方法。


  • 我必須改變SVN目錄結構來給每個項目自身的三重(主幹/分支/標籤)?我想答案是'是'。

不,你不。例如,請參閱Apache ServiceMix Source Tree:這是一個多模塊maven項目,但模塊位於一個trunk之下。另一方面,XWiki 不是一個單獨的產品,而是一個產品和項目的生態系統,詳見Source Repository頁面,它有很多幹線/分支/標籤。您可以瀏覽其存儲庫here以瞭解佈局。

但選擇一種方法或另一種方法不僅僅是一種品味問題,它實際上取決於您的發佈週期(稍後更多地在mvn release上)。如果您的項目中的組件共享相同的版本(一個ServiceMix),我只使用一箇中繼。如果他們有一個獨立的釋放週期(一拉XWiki實現),我會使用一個多個「軀幹/標籤/分支」結構等中this thread描述的一個:

myrepo 
    + .links (2) 
    + trunks 
     + pom.xml 
    + parent-pom (1) 
    + trunk 
     + pom.xml 
    + project-A 
    + trunk 
     + pom.xml 
    + project-B 
    + trunk 
     + pom.xml 

1)的父POM項目有 一個自己的發佈週期。每個 組件的POM將使用它作爲父代 (簡單地使用groupIdartifactId,否relativePath)。對於 版本,您必須首先發布 父POM。

2)這是一個使項目的特定分支 易於檢出的結構,通常是 中繼。顛覆用戶檢出 myrepo/.links/trunk以獲取所有源頭的 版本。訣竅是, 在於該目錄包含 外部鏈接(即,與 svn:externals屬性)到這個 項目的所有其它模塊(父,聚甲醛,項目A,項目 -B)的 中繼線。此 目錄中的pom.xml從未發佈,其 僅包含用於啓用多個 模塊構建的三個模塊的 模塊部分。有了這個結構 你能夠輕鬆設置分支機構 例如爲:

myrepo 
    + .links 
    + branch-2.x 
     + pom.xml 

我用這個設置很多次,它工作得很好。

  • 如果我改變結構,其中的好處上面提到的做我鬆(我的意思是將更加複雜與Maven這樣做)?

讓我逐一回答每一點。

  • 更新和簽入很容易得益於svn externals。一個簡單的svn updatesvn commit就可以做到。

  • 標籤或分支的創建很簡單,因爲maven release plugin會爲您處理此問題(並且標籤和分支會更乾淨)。

  • 將資源從一個項目移到另一個項目看起來並不複雜。

  • 全局重構(例如更改常用類的包)很容易,因爲您仍然可以在完整的主幹結帳上工作。

  • 合併可能不那麼容易。但是,你真的把班級從一個項目轉移到另一個項目嗎?

  • 什麼是等價的方法與Maven做呢?

如果需要使用建議的佈局的Maven插件版本,一個與SVN的外部。

+0

+1:非常感謝您的全面回答。我需要一些時間來處理所有的鏈接並做一些測試。 – tangens 2009-10-18 08:07:12

+0

不客氣。如果有什麼不清楚,請告訴我。 – 2009-10-18 09:29:59

1

如果你想使用Maven 的依賴管理,你認爲你的項目結構已經足夠好/非常適用於你,這裏是一個有用的提示:忘記Maven的。

Maven是不僅僅是一個依賴管理工具多了不少,它自稱爲「軟件項目管理和綜合工具」這顯然涵蓋的依賴也有很多其他的基地了。由於您只需要依賴管理,因此您至少應該查看僅用於管理依賴項的Ant Ivy之類的工具。

常春藤的真正好處是,您可以在保留現有項目結構,構建腳本以及您已經在其上構建的任何內容的情況下,更好地處理依賴關係管理,並且與Maven相比更加精細。常春藤不強化任何項目結構或配置模式,它允許您定義您想從依賴項管理工具獲得的內容,然後將其添加到您的項目中,而不是強迫您的項目在結構上成爲某些人在象牙塔。

爲了進一步幫助你決定,由雙方在這裏是相互之間的比較:

+0

感謝您的回答。我已經着眼於Ivy的依賴管理,但我真的很喜歡用同樣的方式構建所有項目並使構建過程變得簡單的maven想法(http://maven.apache.org/what-is-maven.html)。 – tangens 2009-10-17 11:09:50

+0

我不同意你的觀點,使用Maven項目結構只會讓事情變得更簡單,如果它是你環境中的_only_項目結構。舉一個例子,你如何用一個使用Maven的成熟Web應用程序將一個工具庫打造成一個平等的結構? – Esko 2009-10-17 13:12:33

+0

@Esko我沒有得到您的評論 – 2009-10-17 13:29:29