尝试创建 OkHttpClient 对象时出现 kotlin/TypeCastException
Posted
技术标签:
【中文标题】尝试创建 OkHttpClient 对象时出现 kotlin/TypeCastException【英文标题】:kotlin/TypeCastException when trying to create OkHttpClient object 【发布时间】:2019-01-04 21:25:00 【问题描述】:当我尝试创建一个新的 OkHttpClient 对象时,抛出一个异常
我正在使用 OkHttp 3.11.0 和 OkIO 2.0.0-RC1。
线程“main”中的异常 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 更多
【问题讨论】:
你能提供出错的代码吗? 【参考方案1】:您是否将 kotlin stdlib 和 stdlib-common 依赖项添加到您的构建中?看起来他们不见了。
【讨论】:
【参考方案2】:对我有用的解决方案(在这个github comment 中提到)是添加okhttp
库本身:
Gradle kotlin DSL:
testImplementation("com.squareup.okhttp3:okhttp:4.2.2")
testImplementation("com.squareup.okhttp3:mockwebserver:4.2.2")
Gradle Groovy DSL:
testImplementation 'com.squareup.okhttp3:okhttp:4.2.2'
testImplementation 'com.squareup.okhttp3:mockwebserver:4.2.2'
【讨论】:
【参考方案3】:我遇到了同样的问题。 在构建路径中添加kotlin-stdlib JAR
【讨论】:
【参考方案4】:很可能你的项目包含okhttp
的版本为3.x.x
,
导致mockwebserver
依赖于错误版本的okhttp
,它还不包含对kotlin-stdlib-common
的传递依赖。
如果您使用 Spring Boot
和 mockwebserver
,只需将以下属性添加到您的 pom 中
<okhttp3.version>4.x.x</okhttp3.version>
【讨论】:
【参考方案5】:好吧,我遇到了同样的问题,我像这样添加了 Kotlin 依赖项:
<dependency>
<groupId>org.jetbrains.kotlin</groupId>
<artifactId>kotlin-stdlib</artifactId>
<version>1.4.32</version>
</dependency>
【讨论】:
【参考方案6】:在 OSGi 中不要使用 kotlin 库,而是使用 kotlin 包: https://kotlinlang.org/docs/reference/kotlin-osgi.html
【讨论】:
以上是关于尝试创建 OkHttpClient 对象时出现 kotlin/TypeCastException的主要内容,如果未能解决你的问题,请参考以下文章
创建对象数组时出现NullPointerException [重复]
尝试为对象设置值时出现 NullReferenceException