2017-05-26 109 views
0

我正在研究一個Java monolith將其分成幾個可重用的模塊。Maven JAR模塊在發佈中包含依賴項?

我開始弄清楚依賴關係樹可能存在一些問題。

解釋我的問題,讓我們想象一個簡單的項目,其中包括4只依賴:

Proj 
    ProjA 
    ProjB 
    ProjC 
    ProjD 

想象一下,我主要依賴項目之一 - ProjA - 需要主要依賴項目之一 - ProjD-。

ProjA 
    ProjD 
    ProjF 

防止類路徑和其他依賴性問題中重複類的最佳做法是什麼?

是否應該在JAR模塊中包含依賴關係,並嘗試通過設計將它們降至最低?在這種情況下,重寫我的子模塊以避免發生這種情況。

或者你應該構建沒有依賴關係的JAR模塊,並且只將它們包含在父「root」項目中?

+0

我不明白你想達到什麼。你在建造一個罐子還是一場戰爭?爲什麼你想重複類?多模塊項目可以具有從一個模塊到另一個模塊的依賴關係(在pom.xml中) –

+0

每個子模塊應該表示與som相關的功能,或者可能表示應用程序中的一個圖層。例如,ProjA是持久層,所以ProjB,ProjC和ProjD依賴於ProjA。所以可以有依賴關係,但不是循環依賴關係。一旦模塊被設置,maven應該抱怨如果有人試圖引入循環依賴。如果有一個明確定義的包結構,那麼不應該在同一個包**中重複類名**。不同軟件包中重複的類名稱會導致代碼重複和/或類名不靈。 –

+0

這不是關於循環依賴。只是重複的類依賴關係。設想2個依賴關係,包括作爲Hibernate的潛在不同版本的依賴項。你如何解決這個問題? – user3779543

回答

0

循環:

是否有依賴關係樹的Maven週期將凸顯。如果您看到週期,則必須重構模塊。

建造順序:

Maven將決定考慮哪種模塊所有模塊的構建順序依賴的其他模塊。因此,您在父pom中指定的模塊順序無關緊要。

Comman第三方庫:

如果您有不同模塊之間共享的任何第三方的依賴,最好的辦法就是保持父項目的POM這種依賴性。

+0

根據我的理解,這就是如果你的模塊沒有跨越多個項目。如果您的模塊由多個項目共享,則它將成爲標準依賴項。如果這個依賴關係具有與其他模塊衝突的依賴關係(第三方或不)?你把它們包含在JAR中嗎? – user3779543

+0

是的。您應該將它們包含在模塊中,因爲您希望您的模塊可以使用。當你的模塊被其他項目使用時,他們應該注意是否接受模塊的傳遞依賴關係。我們遵循這個規則來處理任何第三方開放源代碼框架,其中圖書館碰撞的可能性較高。 – Shinchan

+0

我尊重標準,但在我的情況下這是非常煩人的。大多數模塊和項目都有標準的apache.commons和/或hibernate和/或jackson依賴。這意味着他們不能按照這個標準共享。建立一個沒有依賴關係的JAR和一個包含所有依賴關係的「über-JAR」是否可行,並根據項目導入的情況包含最有利的JAR? – user3779543

相關問題