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

无法执行JAR文件:找不到或无法加载主类问题求助

解决可执行JAR主类找不到的问题

优先用Gradle配置搞定(比手动打包靠谱得多)

别折腾手动写Manifest了,Gradle的官方插件能帮你自动处理:

  1. 如果你用Groovy版的build.gradle,添加以下配置:
plugins {
    id 'java'
    id 'application'
}

application {
    mainClass = 'com.ikea.us.test.MyClass' // 填完整类名,不带.class后缀
}

要是用Kotlin DSL的build.gradle.kts,就这么写:

plugins {
    java
    application
}

application {
    mainClass.set("com.ikea.us.test.MyClass")
}

执行./gradlew assemble,生成的可执行JAR在build/libs/目录下,直接运行这个JAR就行。

如果需要打包含所有依赖的胖包(方便部署到Docker),加个shadow插件:
Groovy版build.gradle补充:

plugins {
    id 'com.github.johnrengelman.shadow' version '8.1.1'
}

shadowJar {
    mainClassName = 'com.ikea.us.test.MyClass'
}

执行./gradlew shadowJar,build/libs/下的胖包直接就能运行。

手动打包的必踩坑(非要自己弄的话)

  1. Manifest格式不能错:
    • 最后一行必须是空行(换行),否则JAR工具会忽略最后一行配置
    • Main-Class的写法严格遵循:Main-Class: com.ikea.us.test.MyClass,冒号后面必须有一个空格,类名不能带.class
  2. 打包命令要精准:
    别用jar cfm app.jar Manifest.txt *,*会把根目录所有文件都打包,包括Manifest.txt本身。正确做法是先进入编译后的class文件目录(比如build/classes/java/main),再执行:
    jar cfm app.jar /path/to/your/Manifest.txt com/ikea/us/test/*.class
    
  3. 检查JAR内容:
    解压JAR,确认存在com/ikea/us/test/MyClass.class文件,路径必须和包名完全对应;同时打开META-INF/MANIFEST.MF,核对Main-Class配置有没有拼写错误或多余空格。

最后排查关键点

  • 确认主类com.ikea.us.test.MyClass里有public static void main(String[] args)方法,签名必须完全一致
  • 试试直接运行:java -cp app.jar com.ikea.us.test.MyClass,如果能跑通,说明JAR里有类但Manifest配置错了;如果还是报错,说明JAR里根本没包含这个类,或者编译后的类路径不对

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 03:57:15