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

Maven RequireUpperBoundDeps报错箭头含义及依赖冲突解决咨询

问题1:报错中<--- 4.8.95和<--- 4.4.12的含义

  • 箭头后的版本是对应父级依赖自身POM文件中原本声明依赖的classgraph版本:
    • io.swagger.core.v3:swagger-jaxrs2:2.1.10、io.swagger.core.v3:swagger-integration:2.1.10两个组件自身依赖的classgraph版本是4.8.95
    • org.javers:javers-core:5.6.1自身依赖的classgraph版本是4.4.12
  • 前面标注的(managed)代表你的项目通过依赖管理(dependencyManagement)配置,强制把这几个路径下的classgraph版本统一覆盖成了4.8.37。

问题2:版本看起来匹配为什么还触发报错

  • 提示里的should be 4.8.37是你项目依赖管理中指定的强制版本,不是RequireUpperBoundDeps规则要求的版本,属于提示文本的歧义问题。
  • RequireUpperBoundDeps规则的核心逻辑是:项目最终使用的依赖版本,必须大于等于所有依赖路径中出现的该依赖的原始版本的最大值,避免低版本被引入后导致依赖高版本API的组件出现类不存在、方法缺失等兼容性问题。
  • 本次所有路径中出现的classgraph原始版本最大值是4.8.95,你当前使用的4.8.37低于该最大值,因此触发规则校验失败。
  • 你执行默认mvn dependency:tree看不到其他路径,是因为默认只会输出最终仲裁生效的依赖,被版本仲裁覆盖掉的依赖路径不会展示,执行mvn dependency:tree -Dverbose就能看到所有完整的依赖路径。

问题3:问题解决方法

可根据你的实际业务场景选择任意一种方案:

  • 方案一(最稳妥):将你项目依赖管理中classgraph的版本升级到4.8.95,匹配所有依赖路径中的最高版本,不会出现兼容性风险。
  • 方案二(兼容现有版本):如果你已经充分测试过4.8.37版本和swagger、javers组件都没有兼容性问题,可以在maven-enforcer-plugin的RequireUpperBoundDeps规则配置中,添加io.github.classgraph:classgraph为忽略校验的构件。
  • 方案三(显式声明依赖):在引入swagger、javers的依赖声明中手动排除classgraph,然后单独在项目中显式引入你需要版本的classgraph依赖,同样需要做好兼容性测试。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 10:00:01