Java打jar包运行提示找不到或无法加载主类问题解决方案求助
错误原因
你遇到的问题由两个配置错误共同导致:
- Main-Class配置不符合规范:
MANIFEST.MF中的主类配置仅需要填写类的全限定名,不需要加.class后缀,你的类没有归属包,直接写Something即可。 - 类文件路径错误:你在项目根目录直接打包
src\*.class时,生成的jar包内部会保留src目录结构,主类实际存放在jar包的src/Something.class路径下,JVM默认从jar包根目录查找主类,自然找不到对应类。
正确打包步骤
- 执行以下命令打包(不需要提前切换目录):
jar -cvef Something Something.jar -C src/ .
参数说明:
-e Something:指定主类为无后缀的Something,会自动写入MANIFEST.MF-C src/ .:切换到src目录后,将该目录下的所有class文件打入jar包的根路径,不会带src目录前缀
- 验证打包结果(可选)
解压生成的Something.jar,确认两处配置:
META-INF/MANIFEST.MF中存在Main-Class: Something配置项- jar包根目录下存在
Something.class、IDiffPresenter.class、DiffPresenter.class等所有需要的类文件
- 运行jar包
使用原有命令即可正常启动:
java -jar Something.jar
注意事项
如果你的项目依赖第三方jar包,上述打包方式不会自动合并依赖,运行时会抛出依赖类找不到的错误。你可以选择两种方案处理:
- 手动在
MANIFEST.MF中添加Class-Path: 你的依赖jar包路径配置项 - 将第三方依赖jar解压后和你的业务类一起打进同一个jar包(即所谓的fat jar)
内容的提问来源于stack exchange,提问作者codejunkie
相关产品推荐
相关产品推荐

