Maven依赖版本号不生效

        最近受log4j2的漏洞的影响,全网码农开始升级log4j2。我这里的服务也需要升级,但是我遇到了一个问题:修改依赖之后发现版本号没有变化。

一、依赖现状

项目A依赖了一个common包,common包里面依赖log4j2

<dependencyManagement>
    <dependencies>
        <dependency>
            <!-- Import dependency management from Spring Boot -->
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-dependencies</artifactId>
            <version>${spring.boot.dependencies.version}</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

<dependencies>
    <dependency>
        <groupId>com.exmaple.foundation</groupId>
        <artifactId>common</artifactId>
        <version>${common.version}</version>
    </dependency>
    ...
</dependencies>

common包依赖修改:

<dependencies>
    <dependency>
        <groupId>com.example.mq</groupId>
        <artifactId>producer-sdk</artifactId>
        <version>2.0.5-SNAPSHOT</version>
        <!-- 排除旧版本log4j2 -->
        <exclusions>
            <exclusion>
                <groupId>org.apache.logging.log4j</groupId>
                <artifactId>log4j-slf4j-impl</artifactId>
            </exclusion>
            <exclusion>
                <groupId>org.apache.logging.log4j</groupId>
                <artifactId>log4j-core</artifactId>
            </exclusion>
            <exclusion>
                <groupId>org.apache.logging.log4j</groupId>
                <artifactId>log4j-api</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    <!-- 引入新版本log4j2 -->
    <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-api</artifactId>
        <version>2.15.0</version>
    </dependency>
    <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-core</artifactId>
        <version>2.15.0</version>
    </dependency>
    ...
</dependencies>

 本以为这样是可以生效的,但实际并没有生效。后来查阅maven依赖关系,发现有以下原因:

1)dependencyManagement优先级要高于dependencies中的

2)spring-boot-dependencies依赖log4j2,版本是2.10.0

3)spring-boot-dependencies放到了dependencyManagement,所以最终使用的版本是2.10.0

这是根因,既然知道了根因,那就好解决了,通过spring官网获得最终解决方案

二、官方修改建议

通过查看spring官方修改意见,如下图示:

Log4J2 Vulnerability and Spring Boot

按照springboot官方提出的修改意见,最终生效。 

 三、总结

        maven依赖很少出现问题,但是真出问题了还是挺难弄的。这个问题困惑了一天,才最终解决。特地写一篇博客记录下:dependencyManagement的优先级要高于dependencies

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值