最近我一直在对前一段时间开发的项目进行一些改进,这就是我的发现。 pom 文件中的许多依赖项没有指定版本,但它们已被解析。该项目由 1 个根模块和 2 个子模块组成。使用聚合器模式,这意味着根本没有 dependencyManagement 部分。上层项目只是聚合了 2 个模块,仅此而已。子项目不将其称为父项目。他们有不同的父母。我无法理解的是,子项目本身和它们的父项目(事实上,它也没有 dependencyManagement)都没有为某些依赖项指定版本。例如:
<dependency>
<groupId>javax.mail</groupId>
<artifactId>javax.mail-api</artifactId>
</dependency>
<dependency>
<groupId>com.sun.mail</groupId>
<artifactId>javax.mail</artifactId>
</dependency>
<dependency>
<groupId>com.sun.mail</groupId>
<artifactId>imap</artifactId>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>jcl-over-slf4j</artifactId>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>jul-to-slf4j</artifactId>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
</dependency>
有人可以帮我解决这个问题吗? maven 是否使用某些默认策略处理版本控制?这个默认策略是什么?
原文由 yuranos 发布,翻译遵循 CC BY-SA 4.0 许可协议
好吧,我想我会自己回答。当然,我查看了 dependency:tree,但我提到的所有依赖项都是树的一级成员。我没有立即注意到的是
dependencyManagement
不存在于父模块中,但是它存在于子模块中,而且它包含更有趣的内容:我以前从未使用过 Spring IO Platform,所以这对我来说是一个全新的概念。事实证明,该平台包含相当多的预配置依赖项:http: //docs.spring.io/platform/docs/current/reference/htmlsingle/#appendix-dependency-versions