gradle java,okhttp,我得到这些异常:java.lang.NoClassDefFoundError:okio/Buffer,没有模块不

p3rjfoxz  于 5个月前  发布在  Java
关注(0)|答案(2)|浏览(82)

我使用java 17和okhttp-4.9.3。调用是:

OkHttpClient httpClient = new OkHttpClient.Builder().build();

字符串
运行程序,我得到了异常:

Exception in thread "ReadStationsThread" java.lang.NoClassDefFoundError: okio/Buffer
at [email protected]/okhttp3.ResponseBody$Companion.create(ResponseBody.kt:248)
at [email protected]/okhttp3.ResponseBody$Companion.create$default(ResponseBody.kt:247)
at [email protected]/okhttp3.internal.Util.\<clinit\>(Util.kt:65)


该程序可以在没有错误的情况下构建。我使用gradle与这些依赖项:

implementation ':okhttp-4.9.3'
implementation ':okio-3.3.0'
implementation ':okio-jvm-3.3.0'
implementation ':kotlin-stdlib-1.8.21'


在module-info.java是这些:

requires okhttp3; 
requires okio; 
requires kotlin.stdlib;


运行程序,调用异常。当我删除mdule-info.java文件,也运行程序没有模块,它的工作没有问题。Anny想法什么模块信息错过了?

xurqigkl

xurqigkl1#

对我有效的是这个版本组合:

  • 1x个月
  • okio-jvm-3.5.0
  • okhttp-4.11.0
  • kotlin-stdlib-1.6.20
dwthyt8l

dwthyt8l2#

不确定它是否能回答您的问题,但在okhttp存储库中找到了此issue,讨论okio和相关依赖项不支持Java 9平台模块系统(aka JPMS)。
另请参见与第一个相关的other issue
此外,当您查看okio-3.3.0.jarMANIFEST.MF文件时,您会发现没有Automatic-Module-Name指令(即okio-jvm-3.3.0.jar中的Automatic-Module-Name: okio)。由于Builder类位于okio的jar中,这就解释了为什么它不能使用当前配置来解析它。
知道了这一点,在您的项目中,模块支持是否是一个真正的需要,因为它可以在没有它的情况下工作?

相关问题