如何解决模块化Java项目中jakarta.json的JsonProviderImpl找不到问题
解决Jakarta JSON在模块化Gradle项目中的Provider找不到问题
问题根源
你遇到的JsonProviderImpl not found错误,本质是模块化环境下服务提供者机制的配置问题:虽然org.glassfish:jakarta.json:2.0.1包包含了API和GlassFish实现类,但你的Gradle/Eclipse配置导致运行时模块路径未正确识别服务提供者声明,或者手动修改类路径破坏了模块化配置。
解决方案
1. 简化Gradle配置
移除手动修改Eclipse类路径的代码,org.javamodularity.moduleplugin插件会自动处理模块化项目的类路径和模块标记,无需手动干预。修改后的build.gradle如下:
plugins { id 'application' id 'org.javamodularity.moduleplugin' version '1.8.9' id 'eclipse' } application { mainModule = "mytest" mainClass = "Test2.Main" } repositories { mavenCentral() } dependencies { implementation 'org.glassfish:jakarta.json:2.0.1' }
2. 保持module-info.java不变
你的模块声明已经正确,只需依赖jakarta.json模块即可,服务提供者会通过Java的SPI机制自动被发现:
module mytest { requires jakarta.json; }
(jakarta.json模块内部已通过provides jakarta.json.spi.JsonProvider with org.glassfish.json.JsonProviderImpl;声明了服务实现)
3. 重新生成Eclipse项目配置
在命令行执行以下命令,清理旧配置并生成符合模块化要求的Eclipse项目文件:
./gradlew clean eclipse
之后在Eclipse中重新导入项目,确认jakarta.json依赖jar在类路径中被标记为[module]。
4. 确保运行时使用模块路径
- 通过Gradle命令运行项目(推荐,避免Eclipse配置问题):
./gradlew run - 如果在Eclipse中直接运行,需检查运行配置:
- 右键Main类 →
Run As→Run Configurations - 切换到
Arguments标签页 - 确认
VM arguments中没有强制使用传统类路径的参数,且Modulepath包含jakarta.json依赖,而非仅在Classpath中。
- 右键Main类 →
内容的提问来源于stack exchange,提问作者CT95
相关产品推荐
相关产品推荐

