Slack Bolt 1.39.3与Java 21兼容问题及报错解决方案咨询
Slack Bolt与Java 21兼容问题解答
你的推测是否正确?
完全正确。这个ClassNotFoundException: javax.websocket.DeploymentException错误的核心原因就是命名空间迁移:Java EE的javax命名空间在Jakarta EE(Java 11+官方延续版本)中已全面替换为jakarta,而你使用的Slack Bolt 1.39.3的Socket Mode组件仍依赖旧的javax.websocket API,Java 21环境中没有这些类,因此抛出找不到类的异常。
实现兼容的具体方案
1. 切换到Slack Bolt的Jakarta兼容依赖
Slack官方针对Jakarta命名空间提供了专门的依赖变体,只需将原有依赖替换为带-jakarta后缀的版本:
原依赖:
// Maven坐标同理 implementation 'com.slack.api:bolt:1.39.3' implementation 'com.slack.api:bolt-servlet:1.39.3' implementation 'com.slack.api:bolt-socket-mode:1.39.3'
替换为:
implementation 'com.slack.api:bolt-jakarta:1.39.3' implementation 'com.slack.api:bolt-servlet-jakarta:1.39.3' implementation 'com.slack.api:bolt-socket-mode-jakarta:1.39.3'
2. 确保WebSocket容器依赖为Jakarta版本
如果项目使用Web容器(如Tomcat、Jetty),需使用支持Jakarta EE的版本:
- Tomcat:使用10.x及以上版本,对应的WebSocket依赖:
implementation 'org.apache.tomcat.embed:tomcat-embed-websocket:10.1.18'
- Jetty:使用11.x及以上版本,对应的WebSocket依赖:
implementation 'org.eclipse.jetty.websocket:jakarta-websocket-server:11.0.15'
3. 适配Spring Boot版本(若使用)
如果你的项目基于Spring Boot,必须升级到Spring Boot 3.x版本:
- Spring Boot 3.x完全支持Jakarta EE 9+,适配Java 17-21;
- Spring Boot 2.x仅支持Java EE(
javax命名空间),无法与Java 21及Jakarta依赖兼容。
内容的提问来源于stack exchange,提问作者Arnaud Jeansen
相关产品推荐
相关产品推荐

