Spring Dependency Management插件如何设置最低依赖版本且不覆盖高版本?
Spring Dependency Management插件:如何设置依赖最低版本且不覆盖更高版本
背景
我正在使用Spring Dependency Management插件,它通过内部变量控制严格的依赖版本。例如,Spring Boot 3.2.11搭配插件1.1.6版本时,xmlunit2.version被严格设置为2.9.1,这意味着org.xmlunit:xmlunit-core的版本会被固定为2.9.1。
当xmlunit-core 2.10.0以下版本存在CVE漏洞时,我们可以通过在build.gradle中添加以下配置来覆盖版本:
ext { set("xmlunit2.version", "2.10.0") }
但这种方式存在隐患:如果后续升级Spring Boot到3.2.99版本(该版本自带安全的xmlunit 2.99.0),若未移除上述覆盖配置,项目会一直使用2.10.0,而非插件提供的2.99.0,导致依赖过时。
Gradle原生方案的局限性
Gradle原生依赖管理支持通过约束设置最低版本:
dependencies { constraints{ implementation 'org.xmlunit:xmlunit-core:2.10.0' } }
这种方式仅要求最低版本,若存在更高版本(如2.99.0)则会优先使用高版本。但Spring Dependency Management插件会覆盖此类约束,且直接在ext{}中覆盖xmlunit2.version会丢失插件推荐的高版本信息,版本范围写法(如"2.10.0+")也无法生效。
限制条件
我无法弃用该插件改用Gradle原生策略,当前团队普遍使用该插件,以往通过直接依赖或在ext中设置严格版本的方式已经产生了技术债务。
需求
是否存在插件支持的方式,能够设置依赖的最低版本且不会覆盖插件提供的更高版本?期望的配置方式类似:
ext { set("xmlunit2.requireVersion", "2.10.0") }
该配置不会覆盖xmlunit2.version=2.99.0,最终依赖树应如下所示:
| \--- org.xmlunit:xmlunit-core:2.10.0 -> 2.99.0 (c)
内容的提问来源于stack exchange,提问作者Reed M
相关产品推荐
相关产品推荐

