jar包使⽤
JAR包是Java中所特有⼀种压缩⽂档,其实⼤家就可以把它理解为.zip包。当然也是有区别的,JAR包中有⼀个META-INF\MANIFEST.MF⽂件,当你成JAR包时,它会⾃动⽣成。JAR包是由JDK安装⽬录\命令⽣成的,当我们安装好JDK,设置好path路径,就可以正常使⽤命令,它会⽤lib\tool.jar⼯具包中的类。这些细节就不⽤管它了。⼀.    jar命令选项:
jar命令格式:jar {c t x u f }[ v m e 0 M i ][-C ⽬录]⽂件名...
其中{ctxu}这四个选项必须选其⼀。[v f m e 0 M i ]是可选选项,⽂件名也是必须的。
-c  创建⼀个jar包
-t  显⽰jar中的内容列表
-x  解压jar包
-u  添加⽂件到jar包中
-f  指定jar包的⽂件名
-
v  ⽣成详细的报造,并输出⾄标准设备
-m  指定manifest.mf⽂件.(manifest.mf⽂件中可以对jar包及其中的内容作⼀些⼀设置)
-0  产⽣jar包时不对其中的内容进⾏压缩处理
-M  不产⽣所有⽂件的清单⽂件(Manifest.mf)。这个参数与忽略掉-m参数的设置
-i    为指定的jar⽂件创建索引⽂件
-C  表⽰转到相应的⽬录下执⾏jar命令,相当于cd到那个⽬录,然后不带-C执⾏jar命令
⼆.  jar使⽤范例:
(1)创建jar包
$ jar cf hello.jar hello  利⽤test⽬录⽣成hello.jar包,如hello.jar存在,则覆盖
(2)创建并显⽰打包过程
$ jar cvf hello.jar hello    利⽤hello⽬录创建hello.jar包,并显⽰创建过程
例:E:\>jar cvf hello.jar hello
标明清单(manifest)
增加:hello/(读⼊= 0) (写出= 0)(存储了 0%)
增加:hello/TestServlet2.class(读⼊= 1497) (写出= 818)(压缩了 45%)
增加:hello/HelloServlet.class(读⼊= 1344) (写出= 736)(压缩了 45%)
增加:hello/TestServlet1.class(读⼊= 2037) (写出= 1118)(压缩了 45%)
(3)显⽰jar包
$ jar tvf hello.jar    查看hello.jar包的内容
指定的jar包必须真实存在,否则会发⽣FileNoutFoundException。
(4)解压jar包
$ jar xvf hello.jar  解压hello.jar⾄当前⽬录
(5)jar中添加⽂件
$ jar uf hello.jar HelloWorld.java    将HelloWorld.java添加到hello.jar包中
(6)创建不压缩内容jar包
$ jar cvf0 hello.jar *.class      利⽤当前⽬录中所有的.class⽂件⽣成⼀个不压缩jar包
(7)创建带manifest.mf⽂件的jar包
$ jar cvfm hello.jar manifest.mf hello
创建的jar包多了⼀个META-INF⽬录,META-INF⽌录下多了⼀个manifest.mf⽂件,⾄于manifest.mf的作⽤,后⾯会提到.
(8)忽略manifest.mf⽂件
$ jar cvfM hello.jar hello    ⽣成的jar包中不包括META-INF⽬录及manifest.mf⽂件
(9)加-C应⽤:
$ jar cvfm hello.jar mymanifest.mf -C hello/
表⽰在切换到hello⽬录下然后再执⾏jar命令
(10)-i为jar⽂件⽣成索引列表
当⼀个jar包中的内容很好的时候,你可以给它⽣成⼀个索引⽂件,这样看起来很省事。
$ jar  i  hello.jar
执⾏完这条命令后,它会在hello.jar包的META-INF⽂件夹下⽣成⼀个名为INDEX.LIST的索引⽂件,
它会⽣成⼀个列表,最上边为jar包名。
(11)导出解压列表
jar tvf hello.jar &
如果你想查看解压⼀个jar的详细过程,⽽这个jar包⼜很⼤,屏幕信息会⼀闪⽽过,
这时你可以把列表输出到⼀个⽂件中,慢慢欣赏!
(12)jar -cvf hello.jar hello/*
例如原⽬录结构如下:
hello
|---com
|---org
你本想只把com⽬录和org⽬录打包,⽽这时jar命令会连同hello⽬洋也⼀块打包进。
这点⼤家要注意。jar命令⽣成的压缩⽂件会包含它后边出的⽬录。我们应该进⼊到hello⽬录再执⾏jar命令。
注意:manifest.mf这个⽂件名,⽤户可以任指定,但jar命令只认识Manifest.mf,它会对⽤户指定的⽂件名进⾏相应在的转换,这不需⽤户担⼼。
三.Manifest.mf⽂件编写规则:
manifest.mf的编写⼀定要注意⼀些细节,它是很苛刻的,
我在此也载过不少跟头,谁让它这么⼩⽓呢,没办法,所以专门给⼤家列出来。
(1) 不能有空⾏和空格的地⽅
第⼀⾏不可以是空⾏( 第⼀⾏的⾏前不可以有空⾏),⾏与⾏之间不能有空⾏,第⾏的⾏尾不可以有空格
(2) ⼀定要有空⾏的地⽅
最后⼀⾏得是空⾏(在输完你的内容后加⼀个回车就OK)
(3) ⼀定有空格的地⽅
key: value      在分号后⾯⼀定要写写⼀个空格
四.怎样使⽤jar包中的类
还是写个⼩例⼦吧,这样直观!
public final class Person
{
public static int age()
{
return 30;
}
}
-> javac Person.java
->jar cvf person.jar Person.class  将上⾯的⽂件打成⼀个jar包
再写⼀个类对其进⾏调⽤:
public class MyAge
{
public static void getAge()
{
System.out.println(Person.age());
}
}
->javac  MyAge.java
->java -classpath person.jar MyAge
************调试⼀下这个程序*******************
五.创建可执⾏jar包
有时⾃⼰写个程序,类⼀⼤堆,时间⼀长连⾃⼰都不知道那个是主类,
⽽且有可能⽤到图⽚或其它⽂件⼀⼤堆,看得也乱,
这时你可以考虑把它做成⼀个可执⾏jar包...
(1) 编辑manifest.mf⽂件加⼊下⾯⼀⾏
Main-Class: MyApplet
注意:Main-Class的⼤⼩定,冒号后的空格,MyApplet后⼀定输⼊回车,然后保存。
(2) 打包
jar cvfm FirstApplet.jar manifest.mf MyApplet.class
注意:manifest.mf指定为存放Mani-Class: MyApplet⽂件的⽂件名
(3) 可执⾏jar的使⽤
java -jar FirstApplet.jar
也可以中使⽤:
注意:类并没有给出,⼤家随便写⼀个就⾏,类名包名⾃⼰随意定,相应的更改就可以...
六.扩展⾃⼰的类
在JDK的安装⽬录\jre\lib\ext⽬录下,SUN为⼤家为我们扩展⾃⼰类的提供了⽅便,
⼤家可以将⾃⼰的类⽂件打成.jar包放在此⽬录下,它由ExtClassLoader类装器负责进⾏装载,
ExtClassLoader类装器是AppClassLoader类装载器的⽗装载器,AppClassLoader主要负责加载CLASSPATH路径下的⽂件,⽽在java中采⽤的⼜是委托⽗装载器的机制,所以此⽬录下存放的jar中的类⽂件不做任何的设置,
类装载器就可以到正常的加载,是不是很⽅便啊,呵...
如果你的.jar是给applet⼩应⽤程序看的,可以在打成jar包之前,在其manifest.mf加⼊下⾯两⾏。
Class-Path: FirstApplet.jar
Class-path: SecondApplet.jar
jdk怎么使用Main-Class: MyApplet
注意:Class-path可以设置多项,直接写jar包名既可。
Main-Class主要当jar中有多个.class类⽂件时,java并不知道那个才是主类,
所以要指定,如果jar包中只有⼀个类当然可以不指定。
Java调⽤类的顺序:java\lib\ext中的类--->Manifest.mf中指定的类-->当前⽬录中的类-->set CLASSPATH中指定的类。
七.调⽤URL⽹络上的jar包
(1) ⽣成jar包的URL
URL u=new URL("jar:"+"FirstAppplet.jar"+!/");
(2) 建⽴jarURLConnection对象
JarURLConnection juc=(JarURLConnection)u.openConnection();
(3) 返回jar包中主类的名字
Attributes MainAttributes();
String Value("Mani-Class");
⼀定要确保你的jar包中的manifest.mf中已正确的设置了Mani-Class属性,再强调⼀下⼀定要注意规则。
(4) 根据得到的主类名创建Class对象
Class c=Class.forName(name);
(5) 根据Class对象调⽤其main⽅法:
Method Method("main",new Class[]{String.class});
cm.invoke(null,new Object[]{});
*************如何调⽤***************
提⽰:上边⽤到了Reflection反射机制的相关知识,⼤家如果多反射机制有兴趣,可查看flect包中的相关内容.
⼋.JAR命令使⽤技巧:
(1) jar创建压ZIP⽂件
jar cvfM TestZIP.jar test        加M参数为了不⽣成META-INF相关内容
然后将TestZIP.jar改为TestZIP.zip就可以,是不是很简单....
(2) 使⽤WinRAR解压.jar⽂件
上边我们已经说过了,说JAR⽂件是⼀种特殊的压缩⽂件,所以它当然可以⽤我们常⽤的⼀些解压缩⼯具来解了,
⾄于怎么解,这就不⽤我说了吧。
(3) ⽤WinRAR⽣成.jar⽂件
我们已经说过JAR包与ZIP包主要区别就是JAR包中多⼀个META-INF的⽬录,
META-INF⽬录下有⼀个manifest.mf⽂件,我们只要建⽴好相关的⽬录⼀压缩就可以了。
⽬录的结构如下:
TestJar
|--META-INF
|--manifest.mf
|--相关的类⽂件
注意:还应该在manifest.mf填写内容,不会写?照着⼀个已有的抄不就⾏了。
补充:
下⽂假设编译后的class⽂件在bin⽬录下
⼀、打包成⼀般的jar包
输⼊如下命令即可:
jar cvf counter.jar -C bin .
其中,“-C bin”实际上是告诉jar命令先cd到bin⽬录下,再在此⽬录执⾏没有参数“-C bin”的命令,等价于:
cd bin
jar cvf counter.jar . // "."代表当前路径
⼆、打包成可运⾏的jar包
要打包成可运⾏的jar包,有两种⽅法,⼀是⼿动创建MANIFEST.MF⽂件,并在其中指定主类;⼆是使⽤jar的-e参数指定可运⾏jar包的⼊⼝点(即main类的完全名称).以Java源代码⾏数统计程序的打包为例,演⽰如何打包:
1. ⼿动创建MANIFEST.MF⽂件:
1)⾸先编辑MANIFEST.MF⽂件,内容如下:
Manifest-Version: 1.0
Created-By: rsljdkt
Class-Path: .
Main-Class: Main
说明:
第⼀⾏指定清单的版本,若⽆,则JDK默认⽣成:Manifest-Version: 1.0
第⼆⾏指明创建的作者,若⽆,则JDK默认⽣成Created-By: 1.6.0_22(Sun Microsystems Inc.)
第三⾏指定主类所在类路径,
第四⾏指明程序运⾏的主类
2)使⽤jar命令进⾏打包:
jar cvfm counter.jar MANIFEST.MF -C bin .
说明:
参数f:指定打包后的包名。
参数m:指定⾃定义的MANIFEST.MF清单⽂件,否则,JDK会⾃动⽣成不包含Main-Class的默认清单。参数c:指定是创建新的归档⽂件。
参数v:在标准输出中⽣成详细输出,该选项是可选的。
2. 使⽤-e参数指定⼊⼝点:
执⾏如下命令即可:
jar cvfe counter.jar Main -C bin .
⽅法⼆:使⽤Eclipse的Export功能:
⼀、打包成⼀般的jar包:
步骤如下:
1)在要打包的项⽬上右击,选择Export
2)在弹出的窗⼝中,选择Java -> JAR File,然后点击next按钮
3)在JAR File Specification窗⼝中,设置打包成的⽂件名和存放位置,点击两侧next
4)在JAR Manifest Specification窗⼝中,设置MANIFEST.MF清单⽂件的配置,
若仅仅打包成单纯的jar包的话,不⽤做任何修改,采取默认即可
若打包成可执⾏jar包的话,可以使⽤已存在的MANIFEST⽂件或者直接选择Main class
5)点击Finish按钮,完成打包。
⼆、打包成可运⾏的jar包
步骤如下:
1)在要打包的项⽬上右击,选择Export
2)在弹出的窗⼝中,选择Java -> Runnable JAR File,然后点击next按钮
3)在Runnable JAR File Specification窗⼝中,选择Launch configuration和Export destination
4)点击Finish按钮,打包完成。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。