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

Java8升级Java11+JideSoft升级后出现ClassNotFoundException问题求助

Java 8升级到Java 11 + JideSoft 3.5→3.7.15 引发ClassNotFoundException问题排查

背景信息

  • 项目从Java 8升级至Java 11,其中一个Web应用的JideSoft版本从3.5升级到3.7.15
  • 该Web应用无依赖解析工具,靠手动维护build.xml及相关配置;其他跨应用模块使用Ivy
  • 运行时控制台输出大量ClassNotFoundException(非Log4J日志),关键缺失类:
    • java.lang.ObjectBeanInfo
    • java.lang.ObjectCustomizer
  • 已解决jide.*.Product类缺失问题(通过添加对应新Jar包),仍存在其他缺失类:
    • com.jidesoft.plaf.basic.BasicCustomizer
    • com.jidesoft.plaf.basic.BasicInitializer
    • org.apache.log4j.LayoutBeanInfo
    • org.apache.log4j.LayoutCustomizer
  • 其他Java Web应用无此问题

排查与解决步骤

1. 补全JideSoft 3.7.15的核心依赖Jar

JideSoft 3.7.15针对Java 11的适配新增了部分模块:

  • 检查JideSoft安装包或官方说明文档,定位包含ObjectBeanInfo、ObjectCustomizer的Jar(通常是jide-common.jar或jide-beans.jar这类核心基础包)
  • 确认是否遗漏jide-plaf.jar(对应com.jidesoft.plaf开头的类),将这些Jar添加到build.xml的类路径配置中

2. 解决Java 9+模块化的访问限制

Java 11的模块化系统默认禁止非JDK模块访问java.lang包:

  • 注意:JDK本身不存在java.lang.ObjectBeanInfo,这类类实际是JideSoft放在java.lang下的适配类,Java 9+会限制外部模块访问该包
  • 启动Web应用时添加JVM参数:--add-opens java.lang/ALL-UNNAMED=ALL-UNNAMED,解除对java.lang包的访问限制
  • 也可检查JideSoft 3.7.15是否有针对Java 9+的适配版本,是否已将java.lang下的类迁移到com.jidesoft.lang这类自定义包

3. 修复Log4J相关类缺失

org.apache.log4j.LayoutBeanInfo这类类来自Log4J扩展包或JideSoft的适配模块:

  • 确认项目Log4J版本与JideSoft 3.7.15兼容,若使用Log4J 1.x,需添加包含BeanInfo类的辅助Jar(如log4j-beans.jar)
  • 若JideSoft自带Log4J适配类,确保对应的JideSoft Jar已加入类路径

4. 对比正常应用的类路径

将出问题的Web应用Jar清单与其他正常运行的应用对比:

  • 找出缺失的核心依赖Jar,检查build.xml是否存在Java版本相关的条件配置(比如Java 11下未加载某些Jar)

5. 验证类加载详情

启动时添加JVM参数-verbose:class,输出类加载日志:

  • 跟踪缺失类的加载尝试路径,确认对应的Jar是否被正确加载
  • 排查是否存在Web应用类加载器隔离问题(比如Jar被放在了错误的目录,导致类加载器无法访问)

内容的提问来源于stack exchange,提问作者Codes with Hammer

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 03:42:14