【问题标题】:Managing dependencies with Maven 2使用 Maven 2 管理依赖项
【发布时间】:2011-04-07 12:13:38
【问题描述】:

我有一个 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?最新可用?它会随着时间而改变吗?

谢谢。

【问题讨论】:

    标签: maven-2 dependencies


    【解决方案1】:

    所以我正在努力收拾残局。我开始主要使用排除项,但我想知道我是否不应该依赖我自己的 pom 文件中的 dependencyManagement 元素。这方面的最佳做法是什么?

    • 您绝对应该使用dependencyManagement 元素来控制传递依赖项中工件的版本,这是要走的路。
    • 您还可以创建 POM 到 group dependencies
    • groupIdartifactId 不匹配时使用excludes(例如spring-core 和整体spring jar)。

    此外,传递依赖项的版本通常没有指定 (...)。如果我不指定任何内容,将加载哪个版本的 spring-core?最新可用?它会随着时间而改变吗?

    它们指定,它们在spring-security-parent POM 的dependencyManagement 部分中声明。版本是 2.0.8。对于已发布的工件,它不会随时间而改变。

    如果你想控制这个传递依赖的版本,使用我写的dependencyManagement元素。

    别忘了mvn dependency:tree(或任何图形前端),这是你最好的武器。

    【讨论】:

    • 非常完整和有用的答案。我已经在 Eclipse 中使用了一个视觉依赖关系:树,它帮助我发现了问题,但我更想知道如何解决它。非常感谢。
    猜你喜欢
    • 2023-04-09
    • 1970-01-01
    • 1970-01-01
    • 2013-05-20
    • 2013-06-22
    • 1970-01-01
    • 1970-01-01
    • 2020-09-14
    • 2011-09-11
    相关资源
    最近更新 更多