[英]Maven dependency exclusion from transitive dependency of spring-context
[英]understanding spring 4 (spring-context) maven dependency
我刚刚开始学习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文件添加到我的项目中,任何人都可以解释为什么它是这样的吗? 因为我正在从教程和教程中学习,这个人添加了这两个依赖项 - > spring-core和spring-context,为什么他这样做了? 他应该只添加spring-context依赖,结果会是一样的,任何人都可以解释一下吗? 谢谢 :)
您需要了解的是Maven处理传递依赖 。
在你的情况下, spring-context
依赖于spring-core
,因此当你在pom.xml
声明spring-context
时,Maven将自动解析spring-core
传递依赖(这样你就不需要声明你的依赖关系了)依赖性等)。
spring-core
没有自己的Spring依赖项。 这就是为什么当你在它上面使用它时,没有其他的Spring依赖项被添加到类路径中
您可以使用Maven 依赖项插件轻松检查项目的依赖关系树
另外,你可以在它的Maven中心页面(如果存在:)中看到每个模块的依赖关系。 这是相关的页面spring-context
最后一点,你所遵循的教程的作者不需要添加spring-core
,这可能只是一个疏忽。 声明spring-core
是一种冗余,只要依赖项的版本同步,就不会产生问题。
它只会将spring-core jar文件添加到我的项目中,任何人都可以 解释为什么它是这样的吗?
它不仅添加了spring-core
JAR文件,而且还添加了此处定义的所有依赖项。 (请参阅“ 此工件取决于... ”部分。
Spring团队将他们的框架划分为一致的模块,因此可以通过不需要所有弹簧束的特定项目来正确使用它。 有些库不依赖于所有上下文JAR,只在核心上。
目前,目前的稳定版本是4.0.5。
因为我正在从教程和教程中学习,这个人添加了 这两个依赖项 - > spring-core和spring-context,为什么他 这样做了? 他应该只添加spring-context依赖,结果会是 一样的,任何人都可以解释一下吗?
是的,结果几乎是一样的。
如果已经声明了spring-context
,则不需要声明spring-core
依赖项, 因为上下文已经依赖于核心 。
除非本教程的作者正在为依赖性管理构建父POM(可能他将拥有一个仅依赖于spring-core
的模块),否则他不应该添加该依赖项,因为它可能会在POM的未来更新中发生冲突。 应删除对核心的声明。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.