2009-07-09 92 views
4

想象以下場景:Maven的版本,顛覆分支機構和本地資源庫

我們有幾個SVN分支去了很多並行發展的。有些項目沒有分支,有些項目是分支的。有很多相互依賴性。我們也有一個本地存儲庫(所以沒有開發者直接下載包,我們使用我們自己的maven倉庫)。

問題是,我們必須在所有的pom文件中指定版本。版本的工件存儲在我們的本地存儲庫中。在處理多個分支時,我們將覆蓋具有來自另一分支的工件的相同版本(在pom文件中)的工件。

如果我在pom文件中使用版本號也包含一些分支信息,問題出現在依賴許多分支模塊的非分支模塊上。

有沒有解決這個問題的標準解決方案/政策?

要爲每個分公司創建一個單獨的存儲庫是一個解決方案,但是看看我們可能擁有的分支數量,這有點貴。

回答

6

您可以使用分類器功能爲您的神器嗎?

我不認爲它是SOP使用分類器,但它應該工作。我相信分類器的目的是根據區域特定的過濾器,JDK版本等創建不同版本的工件。但是這似乎是一個非常特定於項目/環境的東西,所以我認爲它可以很好地劫持它。

如果你指定你這樣的假象:

<artifactId>artifact-a</artifactId> 
<groupId>com.mygroup</groupId> 
<version>1.1-SNAPSHOT</version> 
<classifier>BRANCH-Q</classifier> 

在你的倉庫,你會得到:

artifact-a-1.1-SNAPSHOT-BRANCH-Q.jar 

然後,你可以使用分類,以獲得正確的指定依賴文物。

1

我認爲你的方法添加分支名稱的版本是正確的。

但是,您應該嘗試避免具有分支的文件,具體取決於分支版本。

考慮你有一箇中繼線,它取決於名爲DEV的分支中的B版本。

在這種情況下,我會爭辯說要麼A應該取決於在trunk中發佈的B版本,要麼應該在DEV分支本身。

希望這是有道理的......

+0

你說得對,但我們已經有了這樣的依賴關係,並且消除這種依賴關係是很多工作。一些模塊已經取決於分支的東西,並且很難跟蹤pom文件中的依賴關係。 – rangalo 2009-07-09 13:06:07

0

我不知道一個標準的方法來此的。一般來說,通過在版本號後添加不同的內容來區分分支是最容易的,或者可能是artifactID。

您也可以使用編號方案來區分分支。例如,如果中繼是版本2.0(下一個主要版本),那麼分支可能是1.1(前一版本的維護版本)。

我不確定您的意思是「我們的本地存儲庫」。如果您的意思是共享的內部團隊/公司存儲庫,那麼通過所有方法,您都希望避免跨不同分支的版本衝突,否則您將遇到具有相同名稱/版本的不同工件的非常奇怪的構建問題。

如果開發人員僅在其本地存儲庫上工作,並且這些分支工件未被添加到某個共享存儲庫(例如,通過某個CI服務器),那麼您通常應該可以。

根據共享工件,您還必須小心分支項目。

假設您有A(中繼線)和B(分支)兩者都取決於C.如果您在C中進行更改以支持B中的更改,則A將會受到影響。在這種情況下你必須分支B,或者只是非常小心。