Maven 解析错误的依赖版本

Maven resolves wrong dependency version

我们的 war 文件不包含 jarfile 的预期快照版本,它包含通过另一个依赖项的旧版本。

简体dependency:tree

war-x.x.x-SNAPSHOT
\- jar1-x.x.x-SNAPSHOT
   +- jar2-x.x.x
   |  +- problemjar-x.x.x
   +- jar3-x.x.x-SNAPSHOT

jar3-x.x.x-SNAPSHOT 具有依赖性 "problemjar-x.x.y-SNAPSHOT"(较新版本),但 war 项目构建(和 dependency:tree)包含 "problemjar-x.x.x" 来自 "jar2-x.x.x".

目前,我们 "exclude" "problemjar-x.x.x" "jar2-x.x.x"。

但很高兴知道这种行为的原因,恕我直言,排除只是一种解决方法。

备注:

编辑:项目结构

war 和 jar1 是一个父 pom 的子项,简化的 dependency:tree 来自 war 项目,该项目将 jar1 项目作为依赖项。其他是 normal/external 依赖项,从 war 项目中可以看出,它也适用于 jar1。

确保以下几点:

1) 每个子模块都应该从它的父模块中获取它的版本,即没有 <version> 标签只有一个包含版本的 <parent> 标签。

2) 当您从同一项目调用依赖项时,请始终按如下方式执行:

<version>${project.version}</version>

Maven 不会 从依赖关系树中获取最新版本。

它采用最近的版本,在您的情况下,这是它遇到的第一个版本。

如果要强制Maven采用特定版本,最好使用<dependencyManagement>而不是排除。