Spring Boot 3.0升级遇javax/enterprise/context/spi/Contextual缺失错误求助
解决Spring Boot 3升级中javax/enterprise/context/spi/Contextual缺失问题
问题根源
你使用的DeltaSpike 1.9.6是基于旧的javax EE API开发的,而Spring Boot 3要求完全迁移到Jakarta EE规范,这个版本的DeltaSpike仍在引用javax包,导致测试时找不到javax.enterprise.context.spi.Contextual类。
修复步骤
1. 升级DeltaSpike到Jakarta兼容版本
DeltaSpike从2.0.x版本开始支持Jakarta EE 10,直接把所有DeltaSpike依赖替换为2.0+的稳定版(比如2.1.1),替换后即可使用Jakarta版本的API。
2. 清理重复依赖
你的gradle配置里重复声明了deltaspike-test-control-module-api,删掉重复项,避免依赖冲突。
3. 可选:移除JUnit Vintage(如果不需要兼容JUnit 4)
Spring Boot 3默认适配JUnit 5,若没有遗留的JUnit 4测试,可以移除junit-vintage-engine,减少不必要的依赖。
修改后的gradle.build依赖示例
dependencies { implementation group: 'jakarta.platform', name: 'jakarta.jakartaee-api', version: '10.0.0' implementation group: 'jakarta.enterprise', name: 'jakarta.enterprise.cdi-api', version: '4.0.1' testImplementation "org.junit.jupiter:junit-jupiter-api:5.10.0" testImplementation "org.junit.jupiter:junit-jupiter-params:5.10.0" testImplementation "org.junit.jupiter:junit-jupiter-engine:5.10.0" // 若无需兼容JUnit 4,可删除下面这行 // testImplementation "org.junit.vintage:junit-vintage-engine:5.10.0" // 替换为Jakarta兼容的DeltaSpike版本 testImplementation 'org.apache.deltaspike.core:deltaspike-core-api:2.1.1' testImplementation 'org.apache.deltaspike.core:deltaspike-core-impl:2.1.1' testImplementation 'org.apache.deltaspike.modules:deltaspike-test-control-module-api:2.1.1' testImplementation 'org.apache.deltaspike.modules:deltaspike-test-control-module-impl:2.1.1' testImplementation 'org.apache.deltaspike.cdictrl:deltaspike-cdictrl-weld:2.1.1' testImplementation group: 'org.jboss.weld.se', name: 'weld-se-core', version: '5.1.1.SP2' }
额外检查
- 执行
gradle dependencies命令,查看依赖树中是否还有javax相关包,如有,用exclude规则排除,示例:implementation('some-dependency') { exclude group: 'javax.enterprise', module: 'cdi-api' } - 确认项目代码中所有
javax.xxx的导入都替换为jakarta.xxx,比如javax.enterprise.context替换为jakarta.enterprise.context。
内容的提问来源于stack exchange,提问作者KJ0797
相关产品推荐
相关产品推荐

