You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

运行含外部依赖的Kotlin-JVM编译Jar时触发ClassNotFoundException

问题原因分析与解决方案

核心问题

运行时触发ClassNotFoundException的本质原因有两点:

  1. 使用java -jar时,命令行指定的-cp参数会被直接忽略,JVM仅读取目标jar包MANIFEST.MF中配置的Class-Path和Main-Class,而你的MyCode.jar未配置这两项,既找不到主入口类,也无法定位依赖的Library类。
  2. 使用kotlin命令运行时,你仅将Library.jar加入类路径,未包含MyCode.jar,导致JVM找不到主类;同时也未明确指定主类的全限定名。

额外注意:Kotlin会将默认包下的顶层main函数编译为[文件名]Kt格式的类(此处是MyCodeKt),这是运行时必须指定的主类名。


解决方案

方案1:编译生成可执行jar(推荐)

重新编译MyCode.jar时,指定主类并添加依赖路径到MANIFEST.MF:

  1. 确保Library.jar编译正常:
kotlinc com/example/Library.kt -d Library.jar
  1. 编译MyCode.jar,指定主类和依赖:
# Linux/macOS
kotlinc -cp Library.jar MyCode.kt -d MyCode.jar -main MyCodeKt -manifest "Class-Path: Library.jar"

# Windows(Class-Path配置语法一致)
kotlinc -cp Library.jar MyCode.kt -d MyCode.jar -main MyCodeKt -manifest "Class-Path: Library.jar"
  1. 直接运行:
java -jar MyCode.jar

方案2:不重新编译,直接正确运行

将两个jar都加入类路径,同时指定主类全限定名:

Linux/macOS

# Java命令
java -cp "MyCode.jar:Library.jar" MyCodeKt

# Kotlin命令
kotlin -cp "MyCode.jar:Library.jar" MyCodeKt

Windows

# Java命令
java -cp "MyCode.jar;Library.jar" MyCodeKt

# Kotlin命令
kotlin -cp "MyCode.jar;Library.jar" MyCodeKt

内容的提问来源于stack exchange,提问作者Plus

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 06:44:59