2010-09-02 229 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