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

Jetty 12部署Jakarta EE应用:类找不到与CDIProvider异常排查

问题排查与解决方案

核心问题分析

Jetty 12采用模块化架构,默认仅启用基础模块,WebSocket、CDI、Faces等Jakarta EE特性需手动启用对应模块;你添加的tyrus-standalone-client会与Jetty自带的WebSocket实现冲突,进而引发后续CDI加载异常。


步骤1:移除冲突依赖

删除pom.xml中的tyrus-standalone-client依赖——Jetty自带WebSocket服务器实现,无需引入第三方WebSocket依赖,该依赖会干扰Jetty的类加载逻辑。


步骤2:配置Jetty 12模块(start.ini)

在Jetty的start.ini中添加以下模块,确保WebSocket、CDI、Faces的Jakarta EE 10实现被正确启用:

# 启用Jakarta EE 10核心配置
--module=ee10-core-profile

# 启用WebSocket服务器(Jakarta EE 10版本)
--module=websocket-jakarta-server

# 启用CDI基础模块与Weld实现(Jetty官方推荐的CDI容器)
--module=cdi-jakarta
--module=weld-jakarta

# 启用Jakarta Faces(Mojarra实现)
--module=jsf-jakarta

# 若项目使用JSP,添加此模块
--module=jsp-jakarta

步骤3:调整项目pom.xml依赖

确保依赖的scope正确,避免与Jetty模块提供的API冲突:

<!-- CDI API:由Jetty cdi-jakarta模块提供,设为provided -->
<dependency>
    <groupId>jakarta.enterprise</groupId>
    <artifactId>jakarta.enterprise.cdi-api</artifactId>
    <version>4.0.1</version>
    <scope>provided</scope>
</dependency>

<!-- Jakarta Faces API:由Jetty jsf-jakarta模块提供,设为provided -->
<dependency>
    <groupId>org.glassfish</groupId>
    <artifactId>jakarta.faces</artifactId>
    <version>4.0.1</version>
    <scope>provided</scope>
</dependency>

<!-- 其他业务依赖按需保留,确保无重复的Jakarta EE API依赖 -->

验证步骤

  1. 重新打包WAR包(确认已移除tyrus依赖)
  2. 重启Jetty服务器,检查启动日志中是否包含websocket-jakarta-server、weld-jakarta、jsf-jakarta等模块加载记录
  3. 部署WAR包,访问项目验证功能正常

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 19:33:26