Spring Boot 2.7迁移至3.1时遭遇java.lang.NoClassDefFoundError问题求助
Spring Boot 2.7迁移至3.1:解决java.lang.NoClassDefFoundError: javax/ws/rs/core/Configuration
这个错误的核心原因是Spring Boot 3.x全面切换到Jakarta EE 9+规范,原Java EE的javax.*命名空间API已被替换为jakarta.*,而javax.ws.rs.core.Configuration属于JAX-RS旧规范类,在Jakarta EE中对应的类是jakarta.ws.rs.core.Configuration。
解决步骤:
- 替换JAX-RS依赖:将项目中依赖的
javax.ws.rs:javax.ws.rs-api替换为Jakarta版本的jakarta.ws.rs:jakarta.ws.rs-api(建议版本3.0.1及以上,适配Spring Boot 3.1)。若使用Spring Boot Starter,确保spring-boot-starter-jersey等starter已升级到3.x版本,它会自动引入正确的Jakarta依赖。 - 全局替换代码导入:搜索项目中所有
import javax.ws.rs.*语句,替换为import jakarta.ws.rs.*,包括Configuration类及相关注解(如@Path、@GET)、工具类的导入。 - 清理依赖冲突:通过依赖分析工具排查依赖树,找出仍引入
javax.ws.rs-api的第三方依赖并排除。
Maven示例:
Gradle示例:<dependency> <groupId>第三方依赖组ID</groupId> <artifactId>第三方依赖包ID</artifactId> <exclusions> <exclusion> <groupId>javax.ws.rs</groupId> <artifactId>javax.ws.rs-api</artifactId> </exclusion> </exclusions> </dependency>implementation('第三方依赖组ID:第三方依赖包ID') { exclude group: 'javax.ws.rs', module: 'javax.ws.rs-api' } - 升级第三方库:若使用的第三方SDK或组件仍依赖旧的JAX-RS规范,优先升级到支持Jakarta EE的版本。
内容的提问来源于stack exchange,提问作者Vadiraj Hebbar
相关产品推荐
相关产品推荐

