Maven项目编译成功但运行时提示Gson/OkHttp包不存在问题咨询
问题
通过OpenAPI YML文件自动生成的APIClient类,项目编译成功,但运行时抛出以下错误:
C:\jag\jag-rsbc-digital-forms-vips-integration-17\jag-vips-client\src\jag-vips-client\target\generated-sources\openapi\src\main\java\ca\bc\gov\open\jag\ordsvipsclient\api\DisclosureApi.java:25:31 java: package com.google.gson.reflect does not exist C:\jag\jag-rsbc-digital-forms-vips-integration-17\jag-vips-client\src\jag-vips-client\target\generated-sources\openapi\src\main\java\ca\bc\gov\open\jag\ordsvipsclient\api\DisclosureApi.java:93:19 java: package okhttp3 does not exist
POM.xml中已引入对应依赖:
<dependency> <groupId>com.google.code.gson</groupId> <artifactId>gson</artifactId> <version>2.10.1</version> </dependency> <dependency> <groupId>com.squareup.okhttp3</groupId> <artifactId>okhttp</artifactId> <version>4.11.0</version> </dependency>
另一个digitalform ords客户端使用相同代码可正常运行,对比两个POM文件无差异,请问为何会出现运行时错误?
可能的原因及解决办法
- 依赖范围异常:检查这两个依赖是否被设置了
scope(比如provided)。如果是provided,编译阶段会生效,但运行时不会被打包到产物里,自然找不到包。直接移除不必要的scope标签,保持默认的compile范围即可。 - Maven缓存损坏:本地Maven仓库的依赖文件可能损坏或未完整下载。执行以下命令清理缓存并重新拉取所有依赖:
mvn clean install -U - 模块依赖传递问题:如果自动生成的代码在独立模块(比如
target/generated-sources/openapi对应的子模块),要确认主模块是否正确引入了该生成模块,同时检查生成模块的POM是否继承了主POM的依赖,有没有漏加gson和okhttp的配置。 - IDE缓存干扰:就算Maven配置没问题,IDE的缓存也可能导致识别异常。可以按以下方式清理:
- IntelliJ IDEA:点击
File -> Invalidate Caches...,选择「Invalidate and Restart」 - Eclipse:点击
Project -> Clean,右键项目选择Maven -> Update Project
- IntelliJ IDEA:点击
- 打包配置排除依赖:检查打包插件(比如maven-jar-plugin、maven-war-plugin)的配置,有没有不小心排除了gson或okhttp,确保这两个依赖被包含在最终的JAR/WAR包中。
- OpenAPI生成器版本不一致:虽然另一个项目正常,但当前项目用的OpenAPI生成器版本可能和它不同,导致生成的代码对依赖的要求有差异。核对两个项目的OpenAPI生成器插件版本,调整为相同版本后重新生成代码。
内容的提问来源于stack exchange,提问作者jianmin tu
相关产品推荐
相关产品推荐

