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

WildFly启动失败:air-diffusion.war部署异常原因排查

解决WildFly 8.2.0.Final部署air-diffusion.war时的ClassNotFoundException问题

问题核心

  • 部署air-diffusion.war到WildFly 8.2.0.Final启动失败,核心异常为ClassNotFoundException: com.sun.image.codec.jpeg.ImageFormatException
  • 该异常导致Spring容器内验证码相关Bean创建失败,进而引发jboss.undertow.deployment.default-server.default-host./air-diffusion服务启动失败,后续出现连锁依赖缺失问题

原因分析

com.sun.image.codec.jpeg.ImageFormatException是Sun/Oracle JDK的私有API,WildFly默认不会将这类私有API暴露给部署的应用。而且从Java 7开始,这类API已被标记为过时,Java 9及以后版本更是直接移除了相关包,兼容性风险很高。

解决方案

方案1:替换私有API为Java标准API(推荐)

彻底解决兼容性问题,把验证码生成代码里依赖com.sun.image.codec.jpeg包的部分,换成Java标准库的javax.imageio相关类:

  • 原代码中使用JPEGImageEncoder、捕获ImageFormatException的逻辑,改用ImageIO.write()处理JPEG图片,异常捕获替换为IOException即可。

方案2:配置WildFly允许访问私有API(临时 workaround)

如果暂时没法修改代码,可以通过调整WildFly配置让应用访问该私有API,但不推荐长期使用:

  1. 找到WildFly安装目录下的modules/system/layers/base/sun/jdk/main/module.xml,在<exports>节点里添加导出项:
    <exports>
        <!-- 保留原有导出内容 -->
        <export module="sun.jdk" name="com.sun.image.codec.jpeg"/>
    </exports>
    
  2. 在air-diffusion.war的WEB-INF目录下创建(如果没有的话)jboss-deployment-structure.xml,添加依赖配置:
    <jboss-deployment-structure>
        <deployment>
            <dependencies>
                <module name="sun.jdk" export="true"/>
            </dependencies>
        </deployment>
    </jboss-deployment-structure>
    
  3. 重启WildFly后重新部署应用

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 14:02:56