我有一个Web应用程序,其中有超过100个由Maven拖动的jar文件,而且事情有点失控。
例如,我最终得到了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元素。最佳做法是什么?
此外,通常不指定传递依赖的版本。例如,在spring-security-core 2.0.5.RELEASE pom文件中有:
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
</dependency>
如果我没有指定任何内容,将加载哪个版本的spring-core?最新的?它会随着时间而改变吗?
感谢。
答案 0 :(得分:3)
所以我正在努力清理乱七八糟的东西。我开始主要使用排除,但我想知道我不应该依赖于我自己的pom文件中的dependencyManagement元素。最佳做法是什么?
dependencyManagement
元素来控制传递依赖项中的工件版本,这是可行的方法。excludes
或groupId
不匹配时使用artifactId
(例如spring-core
和单片spring
jar)。此外,通常不指定传递依赖的版本(...)。如果我没有指定任何内容,将加载哪个版本的spring-core?最新的?它会随着时间而改变吗?
指定了 ,它们在spring-security-parent POM的dependencyManagement
部分中声明。版本是2.0.8。 此发布的工件不会随时间而改变。
如果你想控制这个传递依赖的版本,请在我写的时候使用dependencyManagement
元素。
不要忘记mvn dependency:tree
(或任何图形前端),这是你最好的武器。