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

NetBeans17+GlassFish7部署JSF项目遇InaccessibleObjectException错误求助

问题分析与解决方案

问题根源

这个InaccessibleObjectException是JDK 9+模块化系统的强封装机制导致的:JDK17默认禁止未命名模块(即传统classpath下的代码)通过反射访问java.base模块中java.util.TreeMap的私有comparator字段。大概率是项目依赖的某个库(或GlassFish内部旧组件)仍在使用这种不兼容模块化的反射操作。

解决步骤

1. 给GlassFish添加JVM授权参数

直接修改GlassFish的全局JVM配置,开放java.util包给未命名模块:

  • 找到GlassFish安装目录下的glassfish/domains/domain1/config/domain.xml
  • 找到<java-config>标签,在现有<jvm-options>列表中添加:
    <jvm-options>--add-opens java.base/java.util=ALL-UNNAMED</jvm-options>
    
  • 重启GlassFish后再运行项目

2. 排查并修复依赖冲突

执行Maven命令查看项目依赖树:

mvn dependency:tree
  • 检查是否引入了旧版本的JSF/CDI依赖(比如Mojarra版本低于4.0.x),GlassFish7自带适配JDK17的Mojarra 4.0,若手动引入旧版本会导致冲突,需排除或升级。
  • 检查是否有依赖使用了过时的反射工具库(比如旧版commons-beanutils、commons-collections),这类库常访问JDK内部API,需替换为适配JDK17的版本。

3. 确认JDK配置一致性

  • 确保NetBeans项目的运行环境完全指向JDK17:在项目属性→库→Java平台,选择JDK17;项目属性→运行→Java平台,同样选择JDK17。
  • 验证GlassFish的JDK配置:查看GlassFish安装目录下glassfish/config/asenv.bat(Windows)或asenv.conf(Linux/macOS),确认AS_JAVA指向JDK17的安装路径,避免混用JDK20。

4. 清理并重新构建项目

  • 除了删除本地Maven仓库,还需清理NetBeans的项目缓存:右键项目→清理并构建,同时删除项目目录下的target文件夹。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 17:44:52