我刚刚开始学习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依赖,结果会是一样的,任何人都可以解释一下吗?谢谢:))
答案 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。应删除对核心的声明。