【问题标题】:understanding spring 4 (spring-context) maven dependency了解spring 4(spring-context)maven依赖
【发布时间】:2014-07-20 17:01:12
【问题描述】:

我刚开始学习 spring,我想使用 4.0.4.RELEASE 版本 - 它实际上是 maven 存储库提供的最新版本,所以我的问题在这里: 如果我像这样添加依赖项:

        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
        <version>4.0.4.RELEASE</version>

-它会自动将所有“基本”模块(如上下文、核心、aop、bean、表达式)添加到我的项目中,但是例如,如果我像这样添加依赖项:

    <groupId>org.springframework</groupId>
    <artifactId>spring-core</artifactId>
    <version>4.0.4.RELEASE</version>

-它只会将spring-core jar文件添加到我的项目中,谁能解释我为什么会这样?因为我正在从教程中学习,并且在教程中,这家伙添加了这两个依赖项-> spring-core 和 spring-context,他为什么这样做?他应该只添加spring-context依赖,结果是一样的,谁能解释一下?谢谢:)

【问题讨论】:

标签: java spring maven


【解决方案1】:

它只会将spring-core jar文件添加到我的项目中,任何人都可以 解释一下为什么会这样?

它不仅添加了spring-core JAR 文件,实际上还添加了here 定义的所有依赖项。 (请参阅“此工件取决于...”部分。

Spring 团队将他们的框架划分为一致的模块,因此它可以被不需要所有 Spring 包的特定项目正确使用。有些库不依赖于所有上下文 JAR,仅依赖于核心。

目前的稳定版本是 4.0.5。

因为我是从教程中学习的,在教程中,小伙补充道 这两个依赖项 -> spring-core 和 spring-context,为什么他 做到了吗?他应该只添加 spring-context 依赖项,结果将是 一样,谁能解释一下?

是的,结果几乎是一样的。

如果已经声明了 spring-context since the context already depends on the core,则无需声明 spring-core 依赖项。

除非本教程的作者正在构建一个父 POM 用于依赖管理(也许他会有一个只依赖于 spring-core 的模块),否则他不应该添加该依赖,因为它可能会在 POM 的未来更新中发生冲突.应删除对核心的声明。

【讨论】:

    【解决方案2】:

    您需要了解的是 Maven 处理 transitive dependencies

    在您的情况下,spring-context 依赖于 spring-core,因此当您在 pom.xml 中声明 spring-context 时,Maven 将自动解析 spring-core 传递依赖项(这样您就不需要声明您的依赖项的依赖项等)。

    spring-core 没有自己的 Spring 依赖项。这就是为什么当您自己使用它时,不会将其他 Spring 依赖项添加到类路径中

    您可以使用 Maven dependency plugin 轻松检查项目的依赖关系树

    此外,您还可以在其 Maven 中心页面中查看每个模块的依赖关系(如果存在 :))。 Here是相关页面spring-context

    最后一点,您所关注的教程的作者不需要添加spring-core,这可能只是一个疏忽。声明 spring-core 是一种冗余,只要依赖项的版本是同步的,就不会导致问题。

    【讨论】:

      猜你喜欢
      • 2016-04-20
      • 2019-09-02
      • 2012-11-12
      • 2012-04-19
      • 2018-01-23
      • 2022-10-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多