JBOSS EAP7.1部署war包报jdk.unsupported模块缺失错误如何解决?
报错信息
{"WFLYCTL0080: 服务失败" => {"jboss.module.service."deployment.telemedicina.war".main" => "WFLYSRV0179: 加载模块出错: deployment.telemedicina.war
Caused by: org.jboss.modules.ModuleNotFoundException: jdk.unsupported"}}
问题根因
该错误仅出现在JBOSS EAP 7.1版本的核心原因是:EAP 7.1的类加载机制默认没有将jdk.unsupported这个JDK内置模块纳入应用的隐式依赖列表,而你的telemedicina.war应用或其依赖的第三方组件用到了该模块下的API(如sun.misc.Unsafe等非标准JDK接口)。EAP 7.2及后续版本默认已经添加了该模块的隐式依赖,因此不会触发报错。
排查步骤
- 确认应用及依赖的第三方Jar是否存在对
jdk.unsupported模块的依赖,可通过JDK自带的jdeps工具扫描:
扫描结果中如果出现jdeps --jdk-internals telemedicina.war/WEB-INF/lib/*.jarJDK internal API (jdk.unsupported)的提示,即可确认依赖关系。 - 核实当前运行的JDK版本是否为EAP 7.1兼容的JDK 8或JDK 11,排除JDK版本不匹配导致的模块缺失问题。
- 检查EAP 7.1安装目录下
modules/system/layers/base/sun/jdk/main/module.xml配置,确认默认未引入jdk.unsupported模块。
解决方案
方案1:单应用配置(推荐)
该方案仅修改当前应用的依赖配置,不会影响服务器上运行的其他服务。
在war包的WEB-INF目录下新建jboss-deployment-structure.xml文件,内容如下:
<jboss-deployment-structure> <deployment> <dependencies> <module name="jdk.unsupported" export="true"/> </dependencies> </deployment> </jboss-deployment-structure>
重新打包war包后重新部署即可。
方案2:全局配置
如果服务器上有多个应用都依赖jdk.unsupported模块,可修改全局配置一次性生效:
- 打开EAP 7.1安装目录下的配置文件:
$JBOSS_HOME/modules/system/layers/base/sun/jdk/main/module.xml - 在文件的
<dependencies>节点下新增如下配置:<module name="jdk.unsupported" export="true"/> - 重启JBOSS EAP服务即可。
内容的提问来源于stack exchange,提问作者simon pezo
相关产品推荐
相关产品推荐

