如何在macOS命令行运行基于OkHttp的Kotlin代码?求助解决报错
解决macOS 13命令行运行Kotlin+OkHttp时的NoClassDefFoundError问题
解决方案核心
替换与OkHttp 4.11.0兼容的Okio版本,并调整编译/运行命令中的类路径配置。
详细操作步骤
- 重新下载兼容版本的Okio Jar包
在/tmp/kotlin目录下,替换原Okio下载命令为:
curl https://repo1.maven.org/maven2/com/squareup/okio/okio/3.4.0/okio-3.4.0.jar > okio-3.4.0.jar
- 调整编译命令
更新类路径中的Okio文件名,执行编译:
kotlinc -classpath okhttp-4.11.0.jar:kotlin-stdlib-1.8.21.jar:okio-3.4.0.jar OkHttpExample.kt -include-runtime -d OkHttpExample.jar
- 调整运行命令
同样更新类路径中的Okio文件名,执行运行:
java -classpath okhttp-4.11.0.jar:kotlin-stdlib-1.8.21.jar:okio-3.4.0.jar:OkHttpExample.jar OkHttpExampleKt
若编译时使用了-include-runtime参数,生成的Jar包已包含Kotlin运行时,可简化运行命令:
java -classpath okhttp-4.11.0.jar:okio-3.4.0.jar:OkHttpExample.jar OkHttpExampleKt
问题原因说明
- 报错
java.lang.NoClassDefFoundError: okio/Buffer的直接原因是版本不兼容:OkHttp 4.11.0依赖的Okio版本为3.4.0,你之前使用的3.3.0版本缺少部分OkHttp所需的类。 - 关于kotlin-stdlib的疑问:该依赖是必须的,ChatGPT的建议合理。编译Kotlin代码时需要依赖kotlin-stdlib提供核心API,显式指定版本可避免与brew自带的Kotlin版本出现兼容性冲突。
内容的提问来源于stack exchange,提问作者user3064538
相关产品推荐
相关产品推荐

