2013-10-21 105 views
1

我正在嘗試使用Maven與JavaScript應用程序的原型。然而,我們的使用案例讓我懷疑我們需要的是否真的有可能。使用多個版本號的多個maven依賴關係

我們有一個公用庫(lib-a),它在其POM中指定的核心庫(core-1.1)的版本1.1上具有依賴性。然後,我們有一個使用lib-a的應用程序,但使用核心庫的1.2版本。 lib-a仍然需要使用1.1版本,因爲它是一個經過測試/發佈/批准的庫,我們感到滿意的是穩定版,並且此時不需要重新發布。

在我們的應用程序POM中,我們引用了lib-a和core-1.2;然後調用mvn clean verify期望/希望我們得到如下應用結構:

應用程序/

的src/

目標/

LIB-A/

core-1.1/

芯 - 1.2/

儘管調試日誌顯示

芯:ZIP:1.1:編譯(除去 - 接近實測值:1.2)

我明白它會想在Java世界中這樣做,是否有辦法阻止它爲我們的案例移除舊版本?

回答

0

試想lib-a包含方法m這需要x類型是在限定core的參數。如果應用程序調用m它將使用core-1.2x類型的版本,而方法m被設計爲接收core-1.1x類型的版本。取決於core-1.1core-1.2之間對x的更改,這可能會不足以不起作用。

你所描述的是Maven內部的共同鬥爭。我只能想象,沒有Maven的鬥爭是一樣的,因爲它是你試圖做的事情的固有問題。如果沒有適當的依賴關係管理,結果實際上可能更加鬼鬼祟祟 - 即使Maven幾乎無聲的調試日誌語句也不太明確。 (儘管如此,您可以在Maven生命週期中構建更強大的檢查。)

有許多有用的開源庫依賴於其他開源庫,您依然也想依賴於自己,因此會給您帶來同樣的問題,或至少有相同的責任,以確保它們都使用相同的庫或以其他方式確保它們愉快地一起工作。

Maven讓你使用「錯誤」版本的依賴(不管是什麼意思),但它不會讓你使用兩個不同版本的相同依賴。

底線,重新思考你在這裏做什麼,因爲你正在前往燒傷。一種重新考慮的方法可能是將core分開,使得當存在僅爲了從屬應用程序的利益而發生(目前稱爲)core的變化時,您不需要(或不經常)需要重新發布lib-a

+0

Hi Sander,感謝您的評論。欣賞你在說什麼,並明白這可能會在某些情況下導致問題。然而,在我們的環境中,我們將使用別名來映射哪個版本的core-1。*用於應用程序和lib-a。這樣在方法/參數調用中就不會有任何交叉。 – IpponSolutions

+0

不確定你的意思是別名?什麼技術是一個概念? –

+0

我們實際上使用Dojo,它允許我們設置路徑別名,以便我們可以管理依賴關係。 – IpponSolutions