2013-03-22 71 views
2

語境:Maven項目設計或反模式設計的好方法

我有一個看起來像一個multimodules Maven項目:

根---- ModuleA

 ModuleB 
     ModuleC 
     ModuleD 
     ....... 

他們是根下有大約25個模塊:

  • 其中一些代表t應用程序的核心(5個模塊)
  • 而其餘每個模塊都表示與某個客戶類型相關的業務流程實施。這些模塊完全相互獨立。

當打包或發佈'Root'項目時,生成的構件是一個ZIP文件,它聚合了所有與'Root'模塊相關的JAR。

根據裝配描述符生成單個ZIP文件,它表示交付工件。

在目標環境的部署時間,單個ZIP在由引擎(一種提供最終服務的Java Web應用程序)使用(加載類)的目錄下解壓縮。

約束

  • 從一個側面的「業務限制」,
  • 而願意降低不同版本之間的迴歸上 對方

上述約束導致我們採取以下釋放方案:

  • 要麼我們釋放Root和ALL其子模塊。這意味着 由此產生的ZIP會使用相同的 版本將所有子模塊JAR封裝在一起。 ZIP將包含類似於: [ModuleA-1.1.jar,ModuleB-1.1.jar,ModuleC-1.1.jar,ModuleD-1.1.jar, .......,ModuleX-1.1.jar]。

  • 或者我們發佈其子模塊的Root和A FEW,我們想要更新的子模塊。 由此產生的ZIP將aggegate所有子模塊JAR:發佈的子模塊將與最後發佈的版本聚合,未發佈的子模塊將與另一個「適當」版本聚合。例如,如果我們做了這樣的增量版本,ZIP將包含類似於[ModuleA-1.2.jar,ModuleB-1.1.jar,ModuleC-1.2.jar,ModuleD-1.1.1.jar, ... ....,ModuleX-1.1.2.jar]。

    • 要麼聲明模塊爲MAVEN MODULES '模塊'用於第一 場景
    • 或者聲明模塊爲Maven依賴':

    這些2種情況是由成爲可能依賴'爲 第二種情況,即INCREMENTAL情景。

問題

,當我們在第二個場景(增量)這兩種情況都可以正常使用,行家釋放小插件:準備被上傳到SCM(SVN)的所有模塊[ModuleA,ModuleB,ModuleD,... ModuleX],它上傳已發佈和未發佈的模塊,而'非發佈模塊'在pom中聲明爲'依賴',而不是'模塊'。

1/IS有沒有辦法避免上傳'未發佈'模塊?有沒有辦法給SCM svn提供者注入'exlcude directrory list'?

2 /更全球性的問題,使用的方法是正確的嗎?或者它是反模式的用法?在那種情況下,應該有什麼選擇?

謝謝。

回答

1

對我來說,你的方法看起來像一個反模式。我建議只將項目放在您想要一起發佈的同一層次結構中。具有不同版本生命週期的項目應該靠自己生存 - 否則您將繼續遇到您提到的問題。如果從根目錄(多模塊設置)運行release插件,則該根目錄的所有內容都將在SVN中進行標記。

在你的情況,我可能會創建以下層次:

  • 核心
  • 根據客戶類型
  • 潛在每種類型的捆綁他們(ZIP)一個
  • 之一,這取決於你的結構

我會按照您創建發佈的方式對它進行分組。這可能意味着您必須在發佈更改時多次運行發佈插件,而不是一次。在覈心,但它會更清潔。

您的打包項目將拉入所有的依賴關係並打包/組裝它們。

如果您有共同的配置選項,我建議將它們放入共同的parent pom。這不一定是你的根(多模塊)POM。

+0

嗨,建議的設計更清潔,但它會給交付團隊帶來更多的工作。我想說,如果可以聲明Maven模塊沒有義務,'模塊'應該是Root項目目錄中的物理應用程序,那將是非常好的。如果有一種smlink插件允許在Root項目級定義'模塊',然後通過發佈Root項目,它的所有'子模塊'也將被釋放,並且只有這些子模塊將被上傳到SCM。你對此有何看法? – Alf 2013-03-22 14:17:08

0

您是否嘗試運行帶有-r參數的maven-release-plugin以及您想要發佈的所有模塊的列表?

基本上,這個參數允許你指定maven命令應該執行的模塊列表。(如果省略它:將包括所有子模塊,這是默認行爲)

查看此命令行的更多詳細信息here

我從來沒有嘗試將它與maven-release-plugin一起使用,我不知道它是否可行,特別是在SCM操作方面。