我刚开始学习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和-> -context这两个依赖项,为什么他要这么做呢?他应该只添加spring-context依赖项,结果将是相同的,有人能解释吗?谢谢:)
发布于 2014-05-31 05:05:27
您需要了解的是,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是一种冗余,只要依赖项的版本是同步的,就不会造成问题。
发布于 2014-05-31 05:02:10
它只会将spring-core jar文件添加到我的项目中,任何人能解释为什么它是这样的吗?
它不仅添加了spring-core JAR文件,实际上还添加了定义为here的所有依赖项。(请参阅“此工件依赖于...”部分。
Spring团队将他们的框架划分为一致的模块,以便它可以被不需要所有spring捆绑包的特定项目正确使用。有一些库并不依赖于所有的上下文JAR,只依赖于核心。
目前稳定的版本是4.0.5。
因为我从教程中学到了,在教程中,这个人添加了,,->,-,->,,,为什么要这样做?他应该只添加spring-context依赖项,结果将是,谁能解释一下?
是的,结果几乎是一样的。
如果已经声明了spring-core,则不需要声明spring-context依赖项since the already depends on the 。
除非教程的作者正在为依赖关系管理构建父POM (也许他会有一个仅依赖于spring-core的模块),否则他不应该添加该依赖,因为它可能会在POM中的未来更新中发生冲突。应该删除对核心的声明。
https://stackoverflow.com/questions/23962993
复制相似问题