2017-04-18 140 views
0

我有這種情況與我的Maven依賴:Maven依賴與不同版本的同一子依賴性

  • X1需要D2.2。
  • Y1需要Z1需要D2.1。

如果我強制每個人使用D2.2,那麼Z1在運行時會失敗,因爲它需要D2.1中的一個類的一個版本(D2.2中不再有)。如果我強制每個人使用D2.1,那麼X1會失敗,因爲它需要一個更新版本的類,現在在D2.2中。將Z1升級到最新版本不起作用,因爲它仍然使用D2.1。 X1和Y1也是如此。

我該如何做這項工作?

感謝, 阿爾瓦羅

+0

聲音像X1或Z1中的一個或兩個都被破壞了,應該修復 - 儘管根據semver,一個類不應該在2.1和2.2版本之間掉線。在這種情況下,您可能必須指定依賴關係才能獲得有用的答案。 – chrylis

+0

2.2中沒有放棄類。構造函數(已被棄用)已從公共轉換爲默認修飾符。所以現在它不再可以通過Z1訪問。啊。 –

+0

類,方法,構造函數,不管。公共API不應該被刪除。 – chrylis

回答

1

你剛纔遇到的diamond dependency problem。這是一個真正的痛苦,它出現在任何有訂單關係的地方。依賴類似於順序,繼承也是這樣,這是在Java中不允許使用multiple inheritance的原因。它甚至出現在推斷中,所謂的Nixon Diamond作爲鑽石依賴模擬。爲了解決這個問題,如果你有權訪問Z1,或者它是開源的,修改/分叉/修改它以使用D2.2,然後修改/分叉/修補Y1以使用修補後的Z1。

如果您擁有自己的專用/鏡像工件存儲庫,我建議您進行修補。創建一個構建作業,克隆開源版本,進行文件修改,構建併發布到您的工件回購。或者,或者另外,使開放源碼發生變化。

祝你好運。