Spring Boot 3项目添加module-info.java时出现“module not found: jakarta.cdi”错误
解决添加jakarta.transaction模块后出现"module not found: jakarta.cdi"的问题
问题原因
Jakarta Transaction模块(jakarta.transaction)依赖于Jakarta CDI模块,启用Java模块系统(存在module-info.java)时,JVM不会自动解析传递依赖的模块——和类路径模式下自动加载所有依赖不同,模块化模式要求你显式声明所有直接或间接需要的模块。
解决方案
在
module-info.java中显式声明对jakarta.cdi的依赖
修改模块声明文件,添加requires jakarta.cdi;:module myModule.main { // 保留已有的其他requires声明 requires jakarta.transaction; requires jakarta.cdi; }验证Gradle依赖配置(可选)
虽然项目无module-info.java时可正常运行,仍可确认build.gradle中是否包含Jakarta CDI的依赖(通常是jakarta.enterprise:jakarta.enterprise.cdi-api),确保其作用域覆盖模块化编译阶段:dependencies { // 示例配置,根据实际版本调整 implementation 'jakarta.transaction:jakarta.transaction-api:2.0.1' implementation 'jakarta.enterprise:jakarta.enterprise.cdi-api:4.0.1' }按需调整模块访问权限
如果代码仅在运行时需要CDI模块而非编译阶段,可使用requires static声明:module myModule.main { requires jakarta.transaction; requires static jakarta.cdi; }
内容的提问来源于stack exchange,提问作者MiguelSlv
相关产品推荐
相关产品推荐

