了解spring 4(spring-context)maven依赖

时间:2014-05-30 20:33:19

标签: java spring maven

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

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

-it会自动将所有“基本”模块(如context,core,aop,beans,expression)添加到我的项目中,但是例如,如果我添加这样的依赖项:

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

-it只会将spring-core jar文件添加到我的项目中,任何人都可以解释为什么它是这样的吗?因为我正在从教程和教程中学习,所以这个人添加了这两个依赖项 - &gt;春天的核心和春天的背景,为什么他这样做?他应该只添加spring-context依赖,结果会是一样的,任何人都可以解释一下吗?谢谢:))

2 个答案:

答案 0 :(得分:10)

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

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

spring-core没有Spring的依赖关系。这就是为什么当你在它上面使用它时,没有其他的Spring依赖被添加到类路径中

您可以使用Maven dependency plugin

轻松检查项目的依赖关系树

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

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

答案 1 :(得分:0)

  

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

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

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

目前稳定版本为4.0.5。

  

因为我正在从教程和教程中学习,所以他添加了   这两种依赖关系 - &gt;春天的核心和春天的背景,为什么他   做到了吗?他应该只添加spring-context依赖,结果将是   同样,任何人都可以解释一下吗?

是的,结果几乎相同。

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

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