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

编译OpenAPI生成器代码时遇Gson模块未导出错误求助

解决Gson内部包模块导出错误

问题原因

OpenAPI生成器生成的代码直接引用了Gson的内部包com.google.gson.internal.bind.util,而Gson的JPMS模块(com.google.gson)并未将这个包对外导出,模块化项目编译时就会触发权限错误。

解决方案

方案1:调整OpenAPI生成器配置(推荐)

直接避免生成依赖Gson内部API的代码,是最稳妥的长期方案。根据你使用的OpenAPI生成器类型(CLI/Gradle/Maven插件),添加对应配置:

  • 以Gradle插件为例,在生成器配置中指定使用Gson公开API:
    openApiGenerate {
        generatorName = "java"
        apiPackage = "com.example.api"
        modelPackage = "com.example.model"
        configOptions = [
            useGsonBuilder: "true",
            serializationLibrary: "gson"
        ]
    }
    
    该配置会让生成器依赖GsonBuilder等公开API,而非内部工具类。

方案2:通过编译器参数临时允许访问内部包

如果暂时无法修改生成器配置,可在Gradle中添加编译器参数,强制让你的模块访问Gson的内部包:
在build.gradle中添加:

tasks.withType(JavaCompile) {
    options.compilerArgs += [
        '--add-exports', 'com.google.gson/com.google.gson.internal.bind.util=你的模块名',
        // 若生成代码还用到其他Gson内部包,可继续追加类似参数
        // '--add-exports', 'com.google.gson/com.google.gson.internal=你的模块名'
    ]
}

注意将你的模块名替换为module-info.java中定义的模块名称(比如com.example.myapp)。

方案3:临时降级Gson版本(不推荐)

旧版本Gson(如2.8.x)未完全适配JPMS,内部包未被模块系统严格限制,降级后可暂时解决问题。但此方案会错过新版本的安全修复与功能更新,仅作为临时应急手段:

implementation 'com.google.code.gson:gson:2.8.9'

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 00:15:00