【记一次奇怪的依赖冲突】学会让SpringBoot脱离Maven parent Section并支持自定义SpringBoot自有依赖库的版本

SpringBoot 2.2.0 - 2.6.3 貌似一直默认使用的 log4j-api 2.12.1
但这次碰到个奇怪的需求,需要的库使用的 log4j-api 为 2.17.1
从而导致了运行时的BUG:

java.lang.NoSuchMethodError: 
org.apache.logging.log4j.Logger.atDebug()L
org/apache/logging/log4j/LogBuilder;

新版的库找不到对应的方法,
但又因为 Maven POM 文件中,SpringBoot 的依赖是直接装配在了 parent 段落中:

    <parent>
        <groupId>org.springframework.boot</groupId>
        <version>2.2.0.RELEASE</version>
        <artifactId>spring-boot-starter-parent</artifactId>
    </parent>

也就是说它作为一个 dependencies 版本不匹配的 BUG,
又没法在 POM 的 dependencies 段落中去修复版本不匹配的问题,太奇葩了。

结果。在一个个比对依赖库版本后,最终才把问题定位在了 parent 段落里。
于是着手开始修复:

  • 根据官方文档,我们把 parent 整节替换为 dependencyManagement,这样腾出你项目 parent 的位置,以后还能留给公司去用
<dependencyManagement>
    <dependencies>
        <dependency>
            <!-- Import dependency management from Spring Boot -->
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-dependencies</artifactId>
            <version>2.6.3</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

然后在 <dependencies> 中插入你想要覆写的SpringBoot的依赖库和对应版本号

最终成品如下:


    <dependencyManagement>
        <dependencies>
            <!-- Override LOG4J-API VERSION provided by Spring Boot -->
            <dependency>
                <groupId>org.apache.logging.log4j</groupId>
                <artifactId>log4j-api</artifactId>
                <version>2.17.1</version>
            </dependency>
            <dependency>
                <!-- Import dependency management from Spring Boot -->
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>2.2.0.RELEASE</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

但要注意的是,IDEA中更新Maven的POM文件以后,最好 Ctrl+Alt+Shift+S 在 Libraries 中清空一下当前的依赖缓存,再刷新一次POM文件。
在这里插入图片描述

最后,必须确保你 Project External Libraries 中对应库的版本号正确才行。
在这里插入图片描述

参照官方文档:
https://docs.spring.io/spring-boot/docs/current/maven-plugin/reference/htmlsingle/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值