编译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
相关产品推荐
相关产品推荐

