以helloworld程序为例:
一:正常流程:
1.首先编写一个hello.java的程序:
public class Hello {
public static void main(String[] args) {
System.out.println("hello world!");
}
}
保存到C:/temp 目录下。
2.编译:hello.java
cd C:/temp
javac hello.java
在C:/temp目录下则会多出一个hello.class文件。(此时如果输入命令:java hello。则会出现hello world的结果。程序运行成功)。
3.打包step1:
//将多个类文件归档到一个名为hellojar.jar的档案中(可以在末尾添加多个文件,以空格分隔)
jar cvf hellojar.jar hello.class
4.修改jar包里面的MANIFEST清单:
加入:
//主程序的main入口所在的类,其值为该类的完整路径。
Main-class: Hello
并将该文件拷贝到temp目录下。
5.打包step2:
//使用现有清单文件“MANIFEST”并 将"hello.class"归档在“hellojar.jar”中:
jar cvfm hellojar.jar MANIFEST.MF hello.class
6.执行jar:
java -jar hellojar.jar
到这儿简单的helloworld 打包程序就完事了。
当然即使最简单的jar打包也会出现很多问题,特别是对于新手!
现在次列出:
1. jar打包出现java.io.IOException: invalid header field
解决:在MANIFEST文件中修改的时候,应注意:
1.每个标签冒号后都跟上一个空格
2.最后一行需要有一个回车键,否则后面那一行是不能打包进去的
3.注意冒号是否为英文半角。
补充说明:Manifest技巧
1.总是以Manifest-Version属性开头
2.每行最长72个字符,如果超过的话,采用续行
3.确认每行都以回车键结束,否则改行将会被忽略
4.如果Class-Pass中存在路径,使用“/”分隔目录,与平台无关
5.使用空行分隔属性和package属性
6.使用"/"而不是"."来分隔package和class。比如com/example/myapp/
7.class要发.class结尾,package要以/结尾
2.jar执行的时候出现:
java错误:找不到或无法加载主类:
这种问题出错的原因有很多,列出常用的几个:
解决:
1.首先确定你的jar包里面有hello.class文件!
2.确定你的程序里有main函数
3.执行java hello确认是否能够运行,不能运行请参考下面:
4.检查你的class_path和path环境:
HOME是 D:\Java\jdk1.8.0_11(你自己jdk的安装环境)
Path是 %JAVA_HOME%\bin;%JAVA_HOME%\jre\bin
CLASSPATH是 .;%JAVA_HOME%lib;%JAVA_HOME%lib\tools.jar
5.在配置环境变量的时候最好路径中不要含有中文和空格! 参考文章:
1.http://bbs.csdn.net/topics/380204156
2.http://zhidao.baidu.com/link?url=EWCI5iWXX_nSPqAtvJ9AqXd_BL8gwnFlg00ByZzhfd3hBxTcHycADGQGWVizYdT5L2AwHEg5OQExpvuSphfu0x0O0ksQrTFwRIBZzbq1UJO
3.http://jingyan.baidu.com/album/3c48dd344a2146e10be3588c.html
4.http://jingyan.baidu.com/article/ff42efa904b4d7c19e220282.html
5.http://blog.csdn.net/gz_xiangjun/article/details/6962818