Maven解决了错误的依赖性版本

时间:2018-06-20 10:33:59

标签: maven maven-3 maven-dependency

我们的warfile不包含jarfile的预期SNAPSHOT-Version,而是通过其他依赖项包含了较旧的发行版。

简化的依赖关系:树

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

jar3-xxx-SNAPSHOT具有依赖项“ problemjar-xxy-SNAPSHOT”(较新版本),但是战争项目的构建文件(和依赖项:tree)包含“ jar2-xxx”中的“ problemjar-xxx”。 >

就目前而言,我们将“ jar2-x.x.x”“排除”为“ problemjar-x.x.x”。

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

注释:

  • “已提供”。“ jar3-x.x.x-SNAPSHOT”中的依赖项“ problemjar-x.x-y-SNAPSHOT”。
  • Maven版本是3.2.5
  • 上面简化的dependency:tree中的级别是正确的,因此到旧版本的路径不短于到新SNAPSHOT版本的路径

编辑:项目结构

war和jar1是一个父pom的子代,简化的依赖项:tree来自war项目,该项目将jar1项目作为依赖项。其他的都是正常/外部依赖关系,从war项目中可以看出,这也适用于jar1。

2 个答案:

答案 0 :(得分:3)

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

它采用的是最接近的版本,对于您而言,这是它遇到的第一个版本。

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

答案 1 :(得分:0)

确保满足以下条件:

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

2)在同一项目中调用依赖项时,请始终执行以下操作:

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