新手入门,今天想要尝试命令行手动打包下jar包,并直接执行jar包。
于是写了一段最经典的helloworld
public class hello{
public static void main(String[] args){
System.out.println("Hello World");
}
}
- 首先将java文件编译成class文件:
E:\JDK8\jre>javac -classpath D:\zhuomian D:\zhuomian\hello.java
- 创建manf文件:
接着便开始打包jar包:
E:\JDK8\jre>jar -cvfm D:\zhuomian\hello.jar D:\zhuomian\manf D:\zhuomian\hello.class
执行jar:
E:\JDK8\jre>java -classpath D:\zhuomian -jar D:\zhuomian\hello.jar 错误: 找不到或无法加载主类 hello
在网上寻找一番后,发现普遍都是由于manifest文件导致或者拥有多个jdk版本不一致导致:
- manifest文件需注明主类入口,并且注意格式,或者打包时创建manf文件一起打包
而我所打的jar包已经导入了清单,并且已经设别出我想要的主入口信息,应该不是这个问题,另外jdk我也只装了一个,也不是版本冲突问题。
在操作过程中,我发现-jar 大概映射的就是manifest里设定的主入口信息,于是我直接不用-jar,直接填入我需要的主入口:
E:\JDK8\jre>java -classpath D:\zhuomian -jar D:\zhuomian\hello.jar
错误: 找不到或无法加载主类 hello
E:\JDK8\jre>java -classpath D:\zhuomian hello D:\zhuomian\hello.jar
Hello World
结果成功执行,因此很疑惑为什么-jar明明映射的也是我想要的入口,但却无法找到或加载?