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

Glassfish 5.0部署ADF 1.2.2.1.4 Fusion Web应用触发类未找到异常怎么解决?

异常原因分析

从抛出的异常信息可以明确问题核心是类加载失败:

部署过程中发生错误:应用加载时出现异常:java.lang.IllegalStateException: ContainerBase.addChild: start: org.apache.catalina.LifecycleException: java.lang.IllegalArgumentException: java.lang.ClassNotFoundException: oracle.adf.mbean.share.config.ADFConfigLifeCycleCallBack。更多详细信息请查看server.log日志。

java.lang.Exception: java.lang.IllegalStateException: ContainerBase.addChild: start: org.apache.catalina.LifecycleException: java.lang.IllegalArgumentException: javax.servlet.ServletException: java.lang.NoClassDefFoundError: oracle/adf/share/logging/ADFLogger
    at com.sun.enterprise.web.WebApplication.start(WebApplication.java:136)
    ...(栈轨迹省略)
    at java.lang.Thread.run(Unknown Source)

根本原因是GlassFish 5.0服务器默认未集成Oracle ADF的运行时依赖库,你在JDeveloper开发环境中编写代码时依赖了IDE内置的ADF核心库,但部署时没有将这些依赖同步到GlassFish的类加载路径下,导致应用启动时无法找到ADF的核心类,最终部署失败。

可行解决方案
  • 方案1:将ADF依赖打入应用包
    在JDeveloper的项目部署配置中,将所有ADF相关的依赖库设置为「打包到WAR/EAR包内」,确保构建出的应用包WEB-INF/lib目录下包含adf-share.jar、adf-mbean-share.jar等核心ADF jar包,部署时应用会优先加载自身携带的依赖。
  • 方案2:将ADF运行时安装到GlassFish全局类路径
    如果多个应用都需要使用ADF,可以避免每个应用重复打包依赖:将全部ADF运行时jar包放到GlassFish域目录的glassfish/domains/[你的域名]/lib路径下,重启GlassFish服务器后,该域下所有应用都可以共用这些全局依赖。
  • 方案3:排查版本兼容性
    确认你使用的ADF版本与GlassFish 5.0的适配性:GlassFish 5.0默认使用Servlet 4.0规范,如果当前ADF版本仅支持Servlet 3.1及更低版本,也会出现类加载冲突。可以将GlassFish降级到4.x版本,或升级ADF到支持Servlet 4.0的对应版本。
  • 方案4:调整类加载优先级
    如果完成上述操作后仍有类加载冲突,可以在应用的WEB-INF/glassfish-web.xml配置文件中添加配置<class-loader delegate="false"/>,让应用优先加载自身lib目录下的依赖,避免和GlassFish自带的公共库产生冲突。

内容的提问来源于stack exchange,提问作者Mohamed.ha

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 08:27:01