尝试创建OkHttpClient对象时出现kotlin / TypeCastException

时间:2018-07-27 18:01:52

标签: java okhttp okio

当我尝试创建一个新的OkHttpClient对象时,会抛出异常

我正在使用OkHttp 3.11.0和OkIO 2.0.0-RC1。

  

线程“主”中的异常java.lang.NoClassDefFoundError:kotlin / TypeCastException           在okhttp3.ResponseBody.create(ResponseBody.java:210)           在okhttp3.internal.Util。(Util.java:60)           在okhttp3.OkHttpClient。(OkHttpClient.java:123)           在p12.Main.main(Main.java:8)       引起原因:java.lang.ClassNotFoundException:kotlin.TypeCastException           在java.net.URLClassLoader.findClass(URLClassLoader.java:381)           在java.lang.ClassLoader.loadClass(ClassLoader.java:424)           在sun.misc.Launcher $ AppClassLoader.loadClass(Launcher.java:349)           在java.lang.ClassLoader.loadClass(ClassLoader.java:357)           ...还有4个

6 个答案:

答案 0 :(得分:7)

您是否已将kotlin stdlib和stdlib公用依赖项添加到构建中?看起来好像缺席了。

答案 1 :(得分:3)

我有同样的问题。 将kotlin-stdlib JAR添加到构建路径

答案 2 :(得分:3)

最适合我的解决方案(此github comment中已提及)是添加okhttp库本身:

kotlin等级DSL:

testImplementation("com.squareup.okhttp3:okhttp:4.2.2")
testImplementation("com.squareup.okhttp3:mockwebserver:4.2.2")

Gradro Groovy DSL:

testImplementation 'com.squareup.okhttp3:okhttp:4.2.2'
testImplementation 'com.squareup.okhttp3:mockwebserver:4.2.2'

答案 3 :(得分:2)

您的项目很可能将okhttp的版本包含为3.x.x的版本, 导致mockwebserver依赖于错误的okhttp版本,该版本还不包含对kotlin-stdlib-common的传递依赖。

如果您将Spring Boot与mockwebserver一起使用,只需将以下属性添加到pom中

<okhttp3.version>4.x.x</okhttp3.version>

答案 4 :(得分:1)

好吧,我遇到了同样的问题,我像这样添加了 Kotlin 依赖项:

<dependency>
   <groupId>org.jetbrains.kotlin</groupId>
   <artifactId>kotlin-stdlib</artifactId>
   <version>1.4.32</version>
</dependency>

答案 5 :(得分:0)

在OSGi中,不要使用kotlin库,而是使用kotlin捆绑软件: https://kotlinlang.org/docs/reference/kotlin-osgi.html