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.ObjectBeanInfojava.lang.ObjectCustomizer
- 已解决
jide.*.Product类缺失问题(通过添加对应新Jar包),仍存在其他缺失类:com.jidesoft.plaf.basic.BasicCustomizercom.jidesoft.plaf.basic.BasicInitializerorg.apache.log4j.LayoutBeanInfoorg.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
相关产品推荐
相关产品推荐

