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

commons-collection从3.2升级到4.4出现Predicate类找不到错误如何解决?

问题根因

commons-collections从3.x升级到4.x时,官方做了不兼容的包名变更:所有类的包路径从org.apache.commons.collections改为org.apache.commons.collections4,两个版本属于完全独立的依赖,不存在类覆盖。
而你使用的commons-configuration 1.6属于老旧版本,编译时依赖的是commons-collections 3.x的API,运行时会主动加载旧包名的org.apache.commons.collections.Predicate类,你只引入4.4版本的情况下自然找不到对应类,触发类NotFound异常。

解决方案

这里提供3种可落地的方案,可根据项目实际情况选择:

  • 方案1:同时引入commons-collections 3.x和4.x依赖(最推荐,改造成本最低)
    两个版本包名完全独立,不会出现类冲突问题,不需要修改任何现有业务代码。注意要把3.x版本升到3.2.2及以上,修复旧版本存在的反序列化安全漏洞。
    Maven依赖配置示例:
<!-- 兼容commons-configuration 1.6的旧版本依赖 -->
<dependency>
    <groupId>commons-collections</groupId>
    <artifactId>commons-collections</artifactId>
    <version>3.2.2</version>
</dependency>
<!-- 项目需要的4.4版本依赖 -->
<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-collections4</artifactId>
    <version>4.4</version>
</dependency>

如果是Gradle项目,对应添加两个版本的依赖即可。

  • 方案2:升级commons-configuration到2.x版本
    commons-configuration 2.x版本已经完成了对commons-collections4的适配,不再依赖旧版collections的API。但注意2.x版本和1.x的API存在不兼容变更,你现有使用XMLConfiguration的代码需要对应调整:

    • 包名从org.apache.commons.configuration.XMLConfiguration改为org.apache.commons.configuration2.XMLConfiguration
    • 分隔符解析开关等配置项的设置方法有调整,需要适配修改对应代码。
  • 方案3:重打包commons-collections4(不推荐,仅用于无法引入两个版本依赖的特殊场景)
    使用maven-shade-plugin等打包插件,把commons-collections4的所有类重定向到旧版org.apache.commons.collections包路径下,可间接满足commons-configuration1.6的调用要求,但是配置复杂,后续版本维护成本高,非必要不选择。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 06:06:03