2013-02-07 90 views
2

我們有一個多模塊POM,也作爲對所涉及的所有子模塊父POM。稱它爲MultiModulePOM。我們有大約70個模塊,編號爲Module1Module70最佳方式* *提供的依賴

現在:這些模塊的前30個在編譯時需要一組JAR文件只有。那是 - scope=provided。由於我們討論的是一個集合的JAR文件,所以保持這30個模塊的同步是非常繁瑣的,並且一般來說,我不是一個複製定義的狂熱粉絲。

所以,我陷入了dependency grouping的陷阱。看起來像一個好主意,但它不適用於provided依賴關係。換句話說:如果我將模塊中的依賴JAR分組在ExtDependencies模塊中,並且使Module1依賴於ExtDependencies,那麼由ExtDependencies引用的JAR將不會被傳遞添加到Module1,因爲它們的範圍是provided

(如果最後一段是不正確的,請讓我知道,因爲它真的可以讓我擺脫困境的)

,我可以看到的唯一的其他選擇是創建一個名爲父POM(例如)IntermediaryPOMIntermediaryPOM擴展爲MultiModulePOM,並將該組依賴JAR文件與scope=provided一起使用。模塊Module1-Module30然後延伸IntermediaryPOM

這似乎這樣的伎倆,但我有三個問題是:

  1. 它增加了POM的另一層那我不知道真正需要的。
  2. 之後,在發佈期間,我發現自己也必須安裝/部署中介POM。
  3. 考慮一般的情況下:所述中間POM可以具有用於其它套的JAR(對於模塊31-50)其他兄弟姐妹。因此,這個解決方案看起來不太好。

所以我的問題是 - 根據你的經驗,最好的方法是什麼?這種用例的任何已知最佳實踐?

回答

1

恐怕這裏沒有簡單的解決方案。

你說得對,如果你在ExtDependencies中聲明的公共依賴爲provided,它們將不會被添加到任何其他依賴於ExtDependencies的模塊的類路徑中。這就是provided的工作原理。

但是,您可以聲明這些沒有範圍的常見依賴關係(例如,默認範圍爲compile),並在ExtDependencies上添加provided依賴關係。在這種情況下,所有ExtDependencies依賴關係都添加到classpath中。上帝,這是很多「依賴關係」 :)

你還提到了其他可能的選擇 - 引入另一個抽象層次(你可能知道,這是一種解決幾乎任何問題的方法)。但是,這種多層次的層次結構不夠優雅,難以維護(我在我們的項目中使用它,所以我一直在那裏)。

一般情況下,我還沒有碰到過這樣的問題,在這樣的規模,但如果我要解決它,我會用第一個選項考慮到作用域建議去。

+0

嗯。我沒有想到...... scope = compile的常見依賴項,以及scope = provided的ExtDependencies。我現在要給它一個鏡頭... +1不管 – Isaac

+0

而且它效果很好。非常感謝。 – Isaac

+0

@Isaac很高興聽到這個。別客氣。 –

相關問題