Ubuntu 14.04命令行运行Java项目报错:找不到或无法加载主类
我来帮你排查这个Ubuntu 14.04下Jar包找不到主类的问题,大概率是清单文件细节或者Jar包结构的小疏漏,咱们一步步来:
检查MANIFEST.MF的格式细节
这是最常见的坑:Java清单文件要求Main-Class后面的冒号必须跟一个空格,也就是正确写法是Main-Class: Demo,而不是你写的Main-Class:Demo。另外再确认文件末尾的换行,你可以用命令cat -A MANIFEST.MF查看,每一行末尾应该有$符号(代表换行符),包括最后一行。验证生成的Jar包中清单文件是否正确
先解压Jar包里的清单文件看看实际内容:jar xf example.jar META-INF/MANIFEST.MF cat META-INF/MANIFEST.MF确认
Main-Class那一行格式正确,没有多余空格或者拼写错误,比如有没有把Demo写成demo(Java类名大小写敏感)。检查主类的包声明
打开你的Demo.java看看有没有package语句,如果有,比如package myapp;,那清单文件里的Main-Class必须写成myapp.Demo,而不是单纯的Demo。确认Jar包的类文件结构
用命令查看Jar包里的内容:jar tf example.jar确保
Demo.class和Demo$1.class都在Jar包的根目录下,而不是某个子文件夹里。如果类文件在子目录,那Main-Class要对应子目录的路径(比如subfolder.Demo)。确认运行Jar包的命令正确
运行Jar包必须用java -jar example.jar这个命令,不要直接用java Demo,后者会从当前目录找类文件,而不是从Jar包里读取。
如果以上步骤都排查过,应该就能解决问题了。
内容的提问来源于stack exchange,提问作者ellen

