2010-09-02 227 views
3

我有一個web應用程序,其中有超過100個由Maven拖動的jar文件,事情有點失去控制。管理與Maven 2的依賴關係

例如,我結束了3個版本的Spring核心類,這導致應用程序部署有時會失敗(似乎從Web-INF/lib加載的jar的順序並不總是與Weblogic相同):

spring-2.5.6.SEC01.jar 
spring-2.5.6.A.jar 
spring-core-2.0.8.jar 

所以我試圖清理這個爛攤子。我開始主要使用排除,但我不知道是否不應該依賴我自己的pom文件中的dependencyManagement元素。最佳做法是什麼?

此外,傳遞依賴的版本通常沒有指定。例如,在春季安全核心2.0.5.RELEASE POM文件有:

<dependency> 
    <groupId>org.springframework</groupId> 
    <artifactId>spring-core</artifactId> 
</dependency> 

,如果我不指定任何事情彈簧核心的版本將被加載?最新的可用?它會隨着時間而改變嗎?

謝謝。

回答

3

所以我試圖清理混亂。我開始主要使用排除,但我不知道是否不應該依賴我自己的pom文件中的dependencyManagement元素。最佳做法是什麼?

  • 你一定要使用dependencyManagement元素來控制傳遞性依賴文物的版本,這是要走的路。
  • 您也可以創建POM到group dependencies
  • 使用excludesgroupIdartifactId不匹配時(例如spring-core和單片spring jar)。

此外,傳遞依賴的版本通常沒有指定(...)。如果我沒有指定任何內容,哪個版本的spring-core會被加載?最新的可用?它會隨着時間而改變嗎?

他們規定,它們在spring-security-parent POM的dependencyManagement部分聲明。該版本是2.0.8。它不會隨着時間的推移這個發佈神器。

如果要控制此傳遞依賴項的版本,請使用我寫的dependencyManagement元素。

並且不要忘記mvn dependency:tree(或任何圖形前端),ti是您最好的武器。

+0

非常完整和有用的答案。我已經在eclipse中使用了一個視覺依賴:tree幫助我發現問題,但我更想知道如何解決這個問題。非常感謝。 – Damien 2010-09-02 21:08:25

+0

@Damien不客氣。 – 2010-09-02 21:11:11