WildFly 27出现ClassNotFound异常,Servlet无法运行求助
解决Servlet运行及ClassNotFound异常问题
问题梳理
- 初始环境:WildFly 10 + JRE 1.8 → 安装JRE 1.8后,报错编译生成的字节码版本63.0不被支持(63.0对应Java 19的class文件版本)
- 调整后环境:WildFly 27 + Java 19 → 版本兼容问题解决,但出现ClassNotFound异常
针对性修复步骤
1. 对齐项目编译与运行环境配置
- 检查IDE编译设置:确保项目的SDK版本、语言级别、字节码编译版本全部设置为Java 19
- 构建工具配置校验:
Maven项目需在pom.xml中明确编译版本:
Gradle项目需在<properties> <maven.compiler.source>19</maven.compiler.source> <maven.compiler.target>19</maven.compiler.target> </properties>build.gradle中配置:java { sourceCompatibility = JavaVersion.VERSION_19 targetCompatibility = JavaVersion.VERSION_19 }
2. 校验WildFly运行配置
- 确认WildFly启动JDK路径:打开WildFly安装目录下
bin/standalone.conf(Linux)或bin/standalone.conf.bat(Windows),确保JAVA_HOME指向Java 19的安装路径 - 清理部署缓存:删除
standalone/deployments下的临时文件与war包,同时删除standalone/data/content中的缓存内容,重新部署项目
3. 定位ClassNotFound的具体原因
- 查看服务器完整日志,明确缺失的类:
- 若为自定义Servlet类:检查类是否存在于编译输出目录(如
target/classes),且包路径与web.xml或@WebServlet注解配置一致 - 若为第三方依赖类:确认依赖已正确引入,且Maven/Gradle已将依赖打包至war包的
WEB-INF/lib目录(可解压war包验证)
- 若为自定义Servlet类:检查类是否存在于编译输出目录(如
- 注意:WildFly 27自带Jakarta EE API实现,若项目中引入了Servlet API等冲突依赖,需将其设置为
<scope>provided</scope>(Maven)或compileOnly(Gradle),避免类加载冲突
4. 新建项目的验证要点
- 新建项目时,直接选择WildFly 27作为服务器,Java 19作为SDK
- 编写最简测试Servlet快速验证:
部署后访问@WebServlet("/test") public class TestServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException { response.getWriter().write("Servlet Test Success"); } }http://localhost:8080/项目名/test,若仍报错,重点分析日志中的类加载细节
内容的提问来源于stack exchange,提问作者user22253296
相关产品推荐
相关产品推荐

