`
xfxlch
  • 浏览: 163734 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

jar命令打包

    博客分类:
  • Java
 
阅读更多
#1 你写了一个HelloWorld.java
内容
public class HelloWorld{
public static void main(String[] args){
	System.out.println("Hello, China");
}

}


#2 你用javac HelloWorld.java 编译生成HelloWorld.class 文件

#3 你执行了>java HelloWorld 输出结果:
F:\xxx>java HelloWorld
Hello, China


#4 用jar打包:网上说需要个文件(文件名可以随意)定义Main-Class,定义个文件hello,内容为:Main-Class:HelloWorld,这个时候,你估计还知道要回车,空一空白行:
Main-Class:HelloWorld


执行jar命令:
jar -cvfm xx.jar hello HelloWorld.class

你得到如下的错误:
引用

F:\xxx>jar -cvfm xx.jar hello HelloWorld.class
java.io.IOException: invalid header field
        at java.util.jar.Attributes.read(Attributes.java:410)
        at java.util.jar.Manifest.read(Manifest.java:199)
        at java.util.jar.Manifest.<init>(Manifest.java:69)
        at sun.tools.jar.Main.run(Main.java:174)
        at sun.tools.jar.Main.main(Main.java:1233)


原因:清单文件不对,根源是用了参数-cvfm,其中m: -m  包含指定清单文件中的清单信息
去掉m参数执行:
jar -cvf xx.jar hello HelloWorld.class

得到结果:
引用

F:\xxx>jar -cvf xx.jar hello HelloWorld.class
已添加清单
正在添加: hello(输入 = 23) (输出 = 25)(压缩了 -8%)
正在添加: HelloWorld.class(输入 = 426) (输出 = 290)(压缩了 31%)


#5 执行命令:java -jar xx.jar
结果:
引用

F:\xxx>java -jar xx.jar
xx.jar中没有主清单属性

好了,你去打开xx.jar,修改里面的MANIFEST.MF文件。
添加:Main-Class:HelloWorld到文件中,回车换行,保存。
再次执行:java -jar xx.jar
结果:
引用

F:\xxx>java -jar xx.jar
Error: Invalid or corrupt jarfile xx.jar

说jar无效。
找原因,再次看到有人提起:Main-Class:之后要空格,于是加上
Manifest-Version: 1.0
Created-By: 1.8.0 (Oracle Corporation)
Main-Class: HelloWorld





保存之后,执行
>java -jar xx.jar
结果:
F:\xxx>java -jar xx.jar
Hello, China


成功了
分享到:
评论
1 楼 xfxlch 2014-08-12  
聪明的你直接新建一个清单文件:MANIFEST.MF
内容:
Main-Class: HelloWorld


记得HelloWorld前面空格,后面空一行
直接命令:
F:\xxx\xx>jar -cvfm xxx.jar MANIFEST.MF HelloWorld.class

打包成功:xxx.jar
执行:java -jar xxx.jar
输出:
F:\xxx>java -jar xxx.jar
Hello, China

相关推荐

Global site tag (gtag.js) - Google Analytics