maven—打包的jar引用到项目中后,jar中显示声明的版本号失效

时间:2021-6-5 作者:qvyue

项目起因—>为项目提供了一个技术组件jar包,组件jar包中使用了groovy 3.0.6版本的依赖,将组件jar引入项目后(SpringBoot2.0.4)版本,但是启动项目后抛出异常。

Caused by: java.lang.ClassNotFoundException: org.apache.groovy.util.concurrent.concurrentlinkedhashmap.ConcurrentLinkedHashMap$Builder
    at java.net.URLClassLoader.findClass(URLClassLoader.java:382) ~[?:1.8.0_241]
    at java.lang.ClassLoader.loadClass(ClassLoader.java:418) ~[?:1.8.0_241]
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:355) ~[?:1.8.0_241]
    at java.lang.ClassLoader.loadClass(ClassLoader.java:351) ~[?:1.8.0_241]

但组件jar明明使用的是groovy 3.0.6版本的依赖,为什么会缺少包呢?查看项目的groovy依赖,发现引入的版本是groovy 2.4.15


经过排查,发现项目引入组件的pom配置中:

maven—打包的jar引用到项目中后,jar中显示声明的版本号失效
image.png

点击向上箭头:

maven—打包的jar引用到项目中后,jar中显示声明的版本号失效
image.png

发现其引用的version为spring-boot-dependencise中定义的2.4.15版本。

maven—打包的jar引用到项目中后,jar中显示声明的版本号失效
image.png

也就是说:依据最近优先的原则,即使在组件jar中定义了版本号,但是SpringBoot的pom文件中声明了dependencyManagement标签中存在该依赖的版本,则优先使用SpringBoot的pom文件。

覆盖的优先级:项目子pom>项目父pom>SpringBoot父pom>组件的pom文件

解决方案

在项目父pom文件中定义dependencyManagement标签,来覆盖pringBoot父pom的配置。

    org.codehaus.groovygroovy3.0.6
声明:本文内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:qvyue@qq.com 进行举报,并提供相关证据,工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。