打包可执行JAR时提示找不到主类test,求解决方法
可执行JAR文件无法找到主类的问题排查与解决
问题场景
为排查JAR打包问题简化了项目结构,具体信息如下:
文件结构
src\ src\test.java src\test.class MANIFEST.mf
test.java代码
import javax.swing.JOptionPane; public class test { public static void main(String[] args) { JOptionPane.showMessageDialog(null, "Hello, World!"); } }
MANIFEST.mf内容
Main-Class: test
已确保MANIFEST文件末尾添加了换行
打包命令
jar cfm test.jar .\MANIFEST.mf .\src\test.class
运行错误
Error: Could not find or load main class test Caused by: java.lang.ClassNotFoundException: test
问题原因
当前打包命令会把src/test.class原封不动地放进JAR文件,导致JAR内部的目录结构为src/test.class。而MANIFEST.mf中指定的Main-Class: test,JVM会在JAR的根目录下寻找test.class文件,找不到就会抛出类未找到异常。
解决方法
有两种可行的解决方式:
方式一:调整打包命令,将class文件放到JAR根目录
使用-C参数切换到src目录后再打包class文件,这样class文件会被放到JAR的根路径:
jar cfm test.jar MANIFEST.mf -C src test.class
方式二:进入src目录后执行打包命令
先切换到src目录,再指定MANIFEST文件的路径:
cd src jar cfm ../test.jar ../MANIFEST.mf test.class
执行以上任意一种方式打包后,再运行java -jar test.jar即可正常弹出对话框。
内容的提问来源于stack exchange,提问作者Xyon4
相关产品推荐
相关产品推荐

