Maven 依赖版本不匹配问题 - 从 repo 解决过时的依赖版本

Posted

技术标签:

【中文标题】Maven 依赖版本不匹配问题 - 从 repo 解决过时的依赖版本【英文标题】:Maven dependency version mismatch issue - resolving outdated version of dependency from repo 【发布时间】:2013-07-08 11:31:32 【问题描述】:

当我尝试在 Eclipse 中构建我的 Maven 项目时,我收到以下构建失败消息:

[INFO] Checking for transitive/resolved version mismatches.
[INFO] com.company.etc:artifact-name:
[INFO]     required: 1.5
[INFO]     resolved: 1.3

我的 POM 文件正在请求此工件的 1.5 版,因此该部分是正确的。但是在列出的存储库中,版本 1.3、1.4 和 1.5 都可用,并且根目录中也有正确的 maven-metadata.xml 文件。简单地将我的 POM 文件要求更改为旧版本不是一种选择,因为我需要最新版本的工件中的功能。

我真的被难住了。是否有任何我忽略的可能导致 Maven解决的版本号低于 repo 服务器上实际可用的版本号

【问题讨论】:

这不是构建失败消息,而是信息消息。这并没有使您的构建失败。此外,在某些情况下,选择较低版本是标准的 Maven 行为 - 它使用先关闭匹配,如果最接近,它将采用较低版本。你能指定你的 pom 吗? 我想我应该指定 - 如果存在版本不匹配,我将其设置为使构建失败。有没有让它选择更高的版本? 是的,通过在 pom 文件中正确位置的显式版本。但是您需要提供您的 pom 详细信息以提供更准确的说明。 另外,mvn dependency:tree 输出会有帮助 mvn dependency:tree 帮我弄明白了,谢谢! 【参考方案1】:

我为这个问题找到了两种可能的解决方案:

第一个是指定一个准确的版本要求,或者说是针对特定版本的依赖的“硬性要求”,如下图:

<version>[1.5]</version>

代替:

<version>1.5</version>

第二个是使用mvn dependency:tree Maven 命令来准确查看引入了哪些依赖项,以及在什么层次结构中。就我而言,当我注意到一个依赖项实际上是在拉入另一个依赖项的旧版本作为子依赖项时,这解决了我的问题。尽管子依赖是在 POM 的其他地方单独指定的,Maven 还是使用了作为子依赖引入的旧版本。我知道这听起来令人困惑,但无论哪种方式,mvn dependency:tree 都应该显示一个依赖项是在不知不觉中被拉入的,还是在一个未指定的版本中。

【讨论】:

以上是关于Maven 依赖版本不匹配问题 - 从 repo 解决过时的依赖版本的主要内容,如果未能解决你的问题,请参考以下文章

是否可以从 p2 repo 解决 maven 插件中的依赖关系

Maven 内部依赖的版本控制

如何修改maven依赖包的版本

maven常见小问题整理

扫描多个 maven pom 以获取不同的依赖版本

maven Local Repo 版本神器