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

Gradle Kotlin应用启动脚本无法找到主类问题排查

执行Gradle生成的脚本提示找不到main类example.AppKt的问题排查

这个问题既不是Gradle或者application插件的bug,也算不上是你的认知偏差——本质是对Gradle application插件生成的脚本的用途和运行环境理解有点偏差。

问题到底出在哪?

你直接运行的build/scripts/example是插件生成的中间临时脚本,它的classpath配置是配合installDist任务生成的完整部署结构设计的,并不是用来单独运行的。当你进入build/scripts目录直接运行它时:

  • 脚本默认期望在项目根目录(或者installDist生成的部署目录)运行,这样才能找到包含所有依赖(比如Kotlin标准库)的相关路径
  • 此时脚本找不到Kotlin stdlib这类依赖JAR,导致JVM虽然能定位到example.AppKt的类文件,但因为缺少它依赖的Kotlin核心类,根本完成不了类加载,最后就抛出了“找不到或无法加载主类”的错误(这个错误很容易误导人,以为真的找不到主类,其实是依赖缺失导致加载失败)

快速验证这个结论

你别进入build/scripts目录,直接在项目根目录运行这个脚本试试:

./build/scripts/example

这时候脚本会正确找到build/libs下的应用JAR,以及通过Gradle缓存找到依赖的Kotlin stdlib,就能正常输出Hello world了。

正确的生产/分发方式

如果你需要生成可以直接分发、在任何环境运行的启动脚本和完整依赖包,应该用Gradle的installDist任务:

./gradlew installDist

执行完这个任务后,build/install/example目录下会生成完整的部署结构:

  • bin/example:真正可直接运行的启动脚本(不管在哪个目录运行都没问题)
  • lib/:包含你的应用JAR以及所有依赖JAR(比如kotlin-stdlib-jdk8、kotlin-stdlib等)

运行这个脚本就完全正常了:

./build/install/example/bin/example

为什么./gradlew run没问题?

因为run任务是Gradle直接接管的,它会自动构建好完整的runtime classpath(包含你的代码和所有依赖),然后直接启动JVM,不需要依赖外部脚本的路径配置,所以不会有路径问题。


内容的提问来源于stack exchange,提问作者otto.poellath

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 08:27:15