You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Maven更新spring-context后,传递依赖spring-expression版本未更新怎么办?

问题描述

项目中最初的依赖声明:

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-context</artifactId>
    <scope>provided</scope>
</dependency>

对应的dependency:tree输出:

[INFO] +- org.springframework:spring-context:jar:5.3.7:provided
[INFO] |  +- org.springframework:spring-aop:jar:5.3.7:provided
[INFO] |  \- org.springframework:spring-expression:jar:5.3.7:provided

因Snyk扫描发现spring-expression存在漏洞,将spring-context版本更新为5.3.27,更新后的依赖声明:

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-context</artifactId>
    <version>5.3.27</version>
    <scope>provided</scope>
</dependency>

但dependency:tree显示子依赖版本未更新:

[INFO] +- org.springframework:spring-context:jar:5.3.27:provided
[INFO] |  +- org.springframework:spring-aop:jar:5.3.7:provided
[INFO] |  \- org.springframework:spring-expression:jar:5.3.7:provided
解决方法

方法1:用Spring BOM统一版本管理

Spring提供物料清单(BOM)来统一所有Spring模块的版本,彻底避免版本不一致问题。在pom.xml的dependencyManagement节点中引入BOM:

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-framework-bom</artifactId>
            <version>5.3.27</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

之后你的spring-context依赖可以不用写版本(也可保留),所有Spring相关模块都会自动使用BOM指定的5.3.27版本。

方法2:显式声明子依赖

直接在dependencies节点中添加spring-aop和spring-expression的依赖,指定5.3.27版本:

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-context</artifactId>
    <version>5.3.27</version>
    <scope>provided</scope>
</dependency>
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-aop</artifactId>
    <version>5.3.27</version>
    <scope>provided</scope>
</dependency>
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-expression</artifactId>
    <version>5.3.27</version>
    <scope>provided</scope>
</dependency>

显式声明的依赖优先级高于传递依赖,会直接覆盖旧版本。

方法3:排查并排除旧版本依赖

执行mvn dependency:tree -Dverbose命令,详细查看哪个第三方依赖间接引入了5.3.7版本的spring-aop或spring-expression,然后在该依赖中添加排除规则:

<dependency>
    <groupId>第三方依赖groupId</groupId>
    <artifactId>第三方依赖artifactId</artifactId>
    <exclusions>
        <exclusion>
            <groupId>org.springframework</groupId>
            <artifactId>spring-aop</artifactId>
        </exclusion>
        <exclusion>
            <groupId>org.springframework</groupId>
            <artifactId>spring-expression</artifactId>
        </exclusion>
    </exclusions>
</dependency>

排除后,项目会自动使用你声明的5.3.27版本。


内容的提问来源于stack exchange,提问作者Kyeiv

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 18:45:17