我使用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想法什么模块信息错过了?
2条答案
按热度按时间xurqigkl1#
对我有效的是这个版本组合:
okio-jvm-3.5.0
个okhttp-4.11.0
个kotlin-stdlib-1.6.20
个dwthyt8l2#
不确定它是否能回答您的问题,但在okhttp存储库中找到了此issue,讨论okio和相关依赖项不支持Java 9平台模块系统(aka JPMS)。
另请参见与第一个相关的other issue。
此外,当您查看
okio-3.3.0.jar
的MANIFEST.MF
文件时,您会发现没有Automatic-Module-Name
指令(即okio-jvm-3.3.0.jar
中的Automatic-Module-Name: okio
)。由于Builder
类位于okio的jar中,这就解释了为什么它不能使用当前配置来解析它。知道了这一点,在您的项目中,模块支持是否是一个真正的需要,因为它可以在没有它的情况下工作?