You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何解决模块化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中直接运行,需检查运行配置:
    1. 右键Main类 → Run As → Run Configurations
    2. 切换到Arguments标签页
    3. 确认VM arguments中没有强制使用传统类路径的参数,且Modulepath包含jakarta.json依赖,而非仅在Classpath中。

内容的提问来源于stack exchange,提问作者CT95

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 21:02:10