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

Gradle构建Java应用报错NoClassDefFoundError:缺失Javalin类

解决Java运行时NoClassDefFoundError: io/javalin/Javalin问题

问题根源

这个报错很典型——你通过java -jar build/libs/MyApp-0.0.1.jar运行的JAR包,只包含了你自己编写的代码,没有打包进Javalin这类第三方依赖类。JVM在运行时找不到这些依赖类,就会抛出NoClassDefFoundError。


方案1:用Shadow Jar插件打包「胖JAR」(推荐用于Heroku部署)

Shadow Jar插件会把你的代码+所有第三方依赖打包成一个独立的可执行JAR,完美适配Heroku这类需要单文件部署的平台。

  1. 在build.gradle中引入Shadow插件:
plugins {
    id 'java'
    id 'com.github.johnrengelman.shadow' version '7.1.2' // 可替换为最新稳定版本
}
  1. 配置插件指定你的主类(如果是Java 9+,改用mainClass.set()):
shadowJar {
    mainClassName = 'products.ProductAPI' // 你的主类全限定名
}
  1. 执行打包命令:
./gradlew shadowJar

打包完成后,build/libs/目录下会生成类似MyApp-0.0.1-all.jar的胖JAR文件。

  1. 本地测试运行:
java -jar build/libs/MyApp-0.0.1-all.jar
  1. 部署到Heroku时,修改Procfile指向这个胖JAR:
web: java -jar build/libs/MyApp-0.0.1-all.jar

方案2:用Gradle Application插件

这个插件会生成包含依赖和启动脚本的分发包,适合本地调试和服务器部署:

  1. 在build.gradle中添加插件:
plugins {
    id 'java'
    id 'application'
}

application {
    mainClassName = 'products.ProductAPI'
}
  1. 生成分发包:
./gradlew installDist

生成的文件会放在build/install/MyApp目录下,启动脚本在bin/子目录中。

  1. 部署到Heroku时,可以让Procfile直接调用启动脚本,或者结合Heroku的Gradle构建流程自动处理依赖。

额外检查项

确保你的build.gradle已经正确引入了Javalin依赖,比如:

dependencies {
    implementation 'io.javalin:javalin:4.6.4' // 替换为你实际使用的版本
    // 其他项目依赖...
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 07:23:57