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

Java访问Google Sheet时遇JsonReader类未找到错误求助

解决方案

1. 核心原因

编译通过但运行时丢类,是因为项目启用了Java模块化(JPMS),但存在两个关键问题:

  • Gson 2.7是2016年的老版本,没有模块化支持(缺少module-info.java),无法被JPMS识别;
  • 主模块的module-info.java中没有显式声明依赖Gson模块,导致运行时类加载器无法找到对应类。

2. 具体修复步骤

(1)升级Gson到模块化兼容版本

将build.gradle中的Gson依赖替换为最新稳定版(如2.10.1),新版本自带模块化支持:

implementation (group: 'com.google.code.gson', name: 'gson', version: '2.10.1')
(2)修改module-info.java添加依赖声明

在主模块com.egensolve.edt.edt的模块声明文件中,加入对Gson的依赖声明:

module com.egensolve.edt.edt {
    requires javafx.controls;
    requires javafx.fxml;
    requires com.google.gson; // 新增这一行
    requires com.google.api.client;
    requires com.google.api.services.sheets;
    requires com.google.oauth.client.jetty;
    
    exports com.egensolve.edt.edt; // 根据自身代码调整导出包
}
(3)验证jlink打包配置

因为使用了jlink插件,升级后的Gson是模块化依赖,配合上面的requires声明,jlink会自动将Gson模块包含到打包镜像中,无需额外配置。

(4)IDE运行配置检查

如果直接在IDE中运行,确保运行配置的**模块路径(Module Path)**包含Gson依赖,而非仅放在类路径(Class Path)中。

3. 补充说明

编译期没问题是因为Gradle的implementation依赖会把Gson加入编译类路径,但JPMS运行时要求显式声明模块依赖,否则类加载器无法从模块路径中加载Gson类,最终触发NoClassDefFoundError。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 20:40:57