有3個項目。 B取決於A,C取決於A和B.A和B都取決於版本1的包P,即P1。現在C介紹P的另一個版本,將其命名爲P2。如何在maven中解決這個奇怪的依賴關係?
的denpendency樹可以看起來像
P1 P1
^ ^
| |
A <- B
^ ^
\ /
\/
C -> P2
爲了避免P confilict,我決定修剪P1,通過修改A和B的pom.xml
但發生奇怪的
的事情:當我用C跑mvn eclipse:eclipse
,我發現它仍然嘗試解決P1的依賴關係!
然後我仔細檢查了每個項目。
In A: Re-check the pom.xml -> NO dependency of P1 , it won't resolve P1 !
In B: Re-check the pom.xml -> NO dependency of P1 , it won't resolve P1 !
In C: Re-check the pom.xml -> NO dependency of P1 itself , but it DOES resolve P1!
|
| - Comment out dependency of A: Resolve P1 !
|
| - Comment out dependency of B: Resolve P1 !
|
| - Comment out dependency of both A & B: Won't resolve P1 !
Finally, I make sure that other packages of A , B and C that depend on do not
depend on P1(Actually, P1 is a small SDK with limited usage, I'm sure other
packages won't denpend on it)
所以這裏是奇怪的事情: 根據檢查,似乎A或B介紹P1,但在A和B分別,我檢查 ,並得出結論,無論是將推出P1。
有什麼問題嗎?
UPDATE
我終於弄清楚什麼是錯的:一看便知。
我不知道如何處理這個沒有更多的細節。 'dependency:tree'的輸出是什麼? –
建立在命令行上嗎? mvn清潔包嗎? – khmarbaise
對於理解類路徑,Eclipse是一個糟糕的IDE。一些其他的IDE,例如IntelliJ和NetBeans有更好的處理不同類路徑的能力。測試與代碼等等。所以你可能會遇到Eclipse本身的問題,而不是Maven問題。我會建議在其他IDE中檢查類路徑,以確認你正在做你認爲正在做的事。我知道IntelliJ會在我自己使用它的時候給出正確的類路徑,而且我可以肯定地告訴NetBeans也一樣。 –