将Axon Framework迁移至Java 17遇NoClassDefFoundError问题求助
Axon Framework适配Spring Boot 3与Jakarta EE迁移指南
针对你遇到的java.lang.NoClassDefFoundError: javax/servlet/http/HttpServletRequest错误,本质是Spring Boot 3全面切换到Jakarta EE API(替代原Java EE的javax API),Axon 4.8.0需通过特定依赖适配Jakarta环境,具体迁移步骤如下:
1. 切换Axon Starter依赖
移除原有的标准Axon Spring Boot Starter,替换为Jakarta专属版本:
<!-- 移除旧依赖 --> <dependency> <groupId>org.axonframework</groupId> <artifactId>axon-spring-boot-starter</artifactId> <version>4.8.0</version> </dependency> <!-- 添加Jakarta版本的Starter --> <dependency> <groupId>org.axonframework</groupId> <artifactId>axon-spring-boot-starter-jakarta</artifactId> <version>4.8.0</version> </dependency>
2. 替换Axon核心模块依赖
如果项目中直接引入了Axon的其他模块(如axon-messaging、axon-server-connector等),同样需要替换为带-jakarta后缀的版本:
<!-- 示例:替换axon-messaging --> <dependency> <groupId>org.axonframework</groupId> <artifactId>axon-messaging-jakarta</artifactId> <version>4.8.0</version> </dependency> <!-- 示例:替换axon-server-connector --> <dependency> <groupId>org.axonframework</groupId> <artifactId>axon-server-connector-jakarta</artifactId> <version>4.8.0</version> </dependency>
3. 替换代码中的包路径
全局替换代码中所有javax.*导入为jakarta.*:
- 将
import javax.servlet.http.HttpServletRequest;改为import jakarta.servlet.http.HttpServletRequest; - 涉及JPA、JMS等其他javax API的导入,同步替换为对应的
jakarta.persistence.*、jakarta.jms.*等
4. 清理遗留的javax依赖
检查项目依赖树,确保没有残留的javax.servlet、javax.persistence等依赖项。可通过Maven命令排查:
mvn dependency:tree | grep javax
若发现遗留依赖,可通过<exclusions>标签排除,或替换为对应的Jakarta版本。
5. 验证配置文件
检查application.properties/application.yml中是否存在指向javax API的配置,Axon相关配置在Jakarta版本中无需额外调整,但需确保Spring Boot 3的配置符合Jakarta规范。
内容的提问来源于stack exchange,提问作者Bernat Mir
相关产品推荐
相关产品推荐

