美文网首页
maven—打包的jar引用到项目中后,jar中显示声明的版本号

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

作者: 小胖学编程 | 来源:发表于2021-06-01 21:32 被阅读0次

    项目起因—>为项目提供了一个技术组件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配置中:

    image.png

    点击向上箭头:

    image.png

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

    image.png

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

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

    解决方案

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

        <dependencyManagement>
            <dependencies>
                <dependency>
                    <groupId>org.codehaus.groovy</groupId>
                    <artifactId>groovy</artifactId>
                    <version>3.0.6</version>
                </dependency>
            </dependencies>
        </dependencyManagement>
    

    相关文章

      网友评论

          本文标题:maven—打包的jar引用到项目中后,jar中显示声明的版本号

          本文链接:https://www.haomeiwen.com/subject/qlugsltx.html