Maven中pom文件定义依赖版本

1,048 阅读2分钟

引入的依赖非预期的版本

模块A引入模块B.jar,模块B引入bcprov-jdk15on:1.59,但在模块A中显示引入的bcprov-jdk15on版本为1.57。 引入错误依赖版本

  • 原因是模块A中pom文件引入了标签dependencyManagement,可以定义本项目用到的依赖版本,但并不真实引入依赖。
  • 模块Apom文件dependencyManagement中定义的依赖版本难以找到bcprov-jdk15on定义的版本,借助idea插件dependencyAnalyzer可以清晰看到B.jar中bcprov-jdk15on显示的版本号是1.57。

解决方案

  • 首选。可以在A项目中pom文件dependencyManagement重新声明bcprov-jdk15on版本为1.59。在已声明的jar包里很难找到对应jar包声明的地方。
  • A项目中在引入B.jar包前引入bcprov-jdk15on:1.59,按照maven依赖版本判断条件,首先声明的会先引入依赖。在B模块中引用主要是为了其他项目公用,主要目的是其他项目只引入B.jar就可以了,这种方法违背了初衷。

依赖原则

  • 路径最短优先原则Maven中pom文件定义依赖版本
  • 路径长度相同
    • 覆盖 如果在同一pom.xml文件中有2个相同的依赖;后面声明的会覆盖前面的依赖,但这里要说严禁使用本情况,严禁在同一个pom中声明两个不同的依赖。
    • 如果是在同一层级下不同pom.xml中有2个相同的依赖;则先声明的依赖,会覆盖后面声明的依赖。比如A项目先引入依赖N,依赖N中pom文件cprov-jdk15on声明的版本号是1.0,A项目后引入依赖M,依赖M中pom文件cprov-jdk15on声明的版本号是2.0,那么最终项目A引入的依赖cprov-jdk15on版本号是1.0。

参考