本帖最后由 刘艳伟 于 2012-11-26 10:44 编辑
为了方便程序的运行,有时我们需要将Java类打成Jar包的形式,在此,我将分别讲述无包名和有包名的类的不同的打包方式。
第一种:无包名
比如将Hello.java,B.java,C.java文件打包为Jar文件。 Hello.java
public class Hello{ public static void main(String args[]){ System.out.println("Hello World!!!"); } } | B.java
public class B{}
C.java
public class C{}
1、编译 E:\lianxi>javac Hello.java B.java C.java
2、编写文件清单MF文件,比如起名为:MANIFEST.MF [名字可任意起,此处如此命名只为了和Java自动生成的清单文件名称一致,不管你起什么名字,生成的Jar包中的清单文件名字都是MANIFEST.MF;后缀名大小写无碍] Manifest-Version: 1.0
Class: B C Main-Class: Hello Created-By: 1.7.0 (Oracle Corporation) | 注:红色前面是有空格的,没有空格会出错,空格数目不限。属性名大小写均可,第三句可有可无,配置清单中两行之间不能有空行。
3、生成Jar文件 E:\lianxi>jar cfm Hello.jar MANIFEST.MF Hello.class B.class C.class 其中参数c表示要生成一个新的Jar文件,f表示要生成的Jar文件的名字,m表示包含指定清单文件中的清单信息。
生成的Jar包的内部格式为
自动生成的MANIFEST.MF中的内容为:
Manifest-Version: 1.0
Class: B C
Created-By: 1.7.0 (Oracle Corporation)
Main-Class: Hello
4、运行 E:\lianxi>java –jar Hello.jar
5、查看Jar文件中的内容 E:\lianxi>jar tf Hello.jar
6、解压Jar文件
E:\lianxi>jar xf Hello.jar
7、更新Jar文件,将一个新的类文件增加到Jar包中
E:\lianxi>jar –uf Hello.jar D.class
此时生成的Jar包的内部格式为
MANIFEST.MF中的内容为:
Manifest-Version: 1.0
Class: B C
Created-By: 1.7.0 (Oracle Corporation)
Main-Class: Hello
可以看到被添加的新类已经添加到Jar包中了,但是在清单文件中并没有添加。○●○●○○●○●○○●○●○○●○●○○●○●○○●○●○○●○●○○●○●○○●○●○ 温馨提示: 被打包后的Jar文件名是可以随意起的,并且文件清单的后缀可以是.txt的,经实验能成功运行。
第二种:有包名
如果要打包的类带有包名,比如 package com.itheima public class Hello{ public static void main(String args[]){ System.out.println("Hello World!!!"); } } |
则打包的过程为: 1、编译 E:\lianxi>javac –d . Hello.java
2、编写文件清单MANIFEST.MF 文件 Manifest-Version: 1.0 Main-Class: com.itheima.Hello Created-By: 1.7.0 (Oracle Corporation) |
3、生成Jar包 E:\lianxi>jar cf test.jar com 此时即使我们不写文件清单,也是可以正确打包的。对于带有包名的类,生成Jar包时直接用最顶层包名,后面不要再跟路径或是文件名,否则无法打包,但要记住当前DOS的运行位置为顶层包名的上一级目录,比如com在E:\lianxi下,则打包时的情况为E:\lianxi>jar cf test.jar com
4、运行
带有包名的Jar包在运行时有些特殊,和无包名类不一样,如下
E:\lianxi>java -cp Hello.jar com.itheima.Hello
或者
E:\lianxi>java -classpath Hello.jar com.itheima.Hello
○●○●○○●○●○○●○●○○●○●○○●○●○○●○●○○●○●○○●○●○○●○●○ 温馨提示: 在DOS中输入jar,回车即可列出打包时的所有参数;
在DOS中输入java,回车即可列出运行Java类的所有参数。 |