Chinaunix首页 | 论坛 | 博客
  • 博客访问: 95648
  • 博文数量: 6
  • 博客积分: 153
  • 博客等级: 入伍新兵
  • 技术积分: 95
  • 用 户 组: 普通用户
  • 注册时间: 2011-11-07 20:57
文章分类

全部博文(6)

文章存档

2012年(5)

2011年(1)

我的朋友

分类: Java

2012-01-21 22:53:03

JAR文件简介

JAR文件的全称是Java Archive File。即Java档案文件。通常JAR文件是一种压缩文件,与ZIP压缩文件兼容。JAR文件与ZIP文件的区别是JAR文件中默认包含了一个名为META-INF/MANIFEST.MF的清单文件,这个文件在生成JAR包时由系统自动生成。当开发出一个应用程序后,该应用程序包含了很多类,发布该应用程序时,通常打包成JAR文件。

JAR文件作为内嵌在Java平台内部处理的标准,故具有可移植性,能够在各种平台上直接使用。把一个JAR文件添加到系统CLASSPATH环境变量中,Java将会把这个JAR文件当成一个路径来处理。JAR文件通常使用jar命令压缩而成。

jar命令详解

在命令行窗口运行不带任何参数的jar命令,系统将会显示详细的jar命令用法。下面通过一些简单的例子来说明jar命令的一些基本用法。

1. 创建JAR文件:jar -cf First.jar -C classes/ .

该命令将classes/目录下全部内容生成一个名为First.jar的文件,如果当前目录已经存在First.jar,那么该文件将被覆盖。如果使用-cvf参数,将显示详细的打包过程。


2. 使用自定义清单内容创建JAR包:jar -cvfm First.jar a.txt -C classes/ .

-m选项指定读取用户清单文件信息,它会在原有清单文件基础上增加a.txt文件中的内容。

3. 查看JAR包内容:jar -tf AntTest.jar

该命令执行结果如下:

 

-tvf参数将显示更详细的信息。

4. 解压缩:jar xf First.jar

该命令将First.jar解压缩到当前目录下。

创建可执行JAR

对于一个可执行的JAR包,用户只需要双击它就可以运行程序了。创建可执行JAR包的关键在于:让javaw命令知道JAR包中哪个类是主类,javaw命令可以通过运行该主类来运行程序,这就要借助于清单文件。对于上面的例子需要在清单文件中增加如下一行:

Main-Class:xiyou.cm.AntTest

上面一行指定了该JAR包中的主类是xiyou.cm.AntTestjavaw命令可以通过运行该JAR包时从xiyou.cm.AntTest开始运行。可以通过jar命令的-m选项来自定义清单文件的内容。

Java在处理这个问题时不怎么好,它要求先把需要增加到清单文件中属性名、属性值放在单独的文件里定义,然后再使用-m选项的命令来读取添加到清单文件中。该文件的格式要求比较严格。

Main-Class:主类<回车>

Ø 每行只能定义一个key-value对,每行之前不能有空格。

Ø 每组key-value之间以:分隔,不能有空格

Ø 文件开头不能有空行

Ø 文件必须以一空行结束,也就是说在Main-Class:xiyou.cm.AntTest后必须有一个回车。

该文件可以保存在任何位置,以任意文件名存放。(注:该文件格式在不同版本的jdk下可能不同,以上以jdk1.6.0_25为准)

例如创建一个可执行JAR包:

jar cvfm First.jar a.txt -C classes/ .

执行该命令后,查看First.jar的清单文件META-INF/MANIFEST.MF

Manifest-Version: 1.0

Created-By: 1.6.0_25 (Sun Microsystems Inc.)

Main-Class: xiyou.cm.AntTest

其他

JAR文件实际上就是ZIP文件,所以可以使用一些常见的解压缩工具来解压缩JAR文件。如Windows下的WinRAR等。可以使用WinRAR来创建jar包,这是需要手动添加清单文件。即需要手动建立META-INF/MANIFEST.MF文件,该文件至少包含两行:

Manifest-Version: 1.0

Created-By: 1.6.0_25 (Sun Microsystems Inc.)

阅读(8732) | 评论(3) | 转发(1) |
给主人留下些什么吧!~~

ykyx002012-05-16 10:39:21

请问更新war包里的单个文件如何操作
比如 jar uvf test.war hello.txt 这样是可以的,如果要把hello.txt 更新到 test.war 下的abc目录应该如何操作呢?请指点,谢谢。

neo4j2012-01-31 21:18:05

重返人生: META-INF/MANIFEST.MF文件里有好多配置信息吧~.....
恩,是有很多内容,大都以键值对形式出现。
具体可参考:http://siyn.iteye.com/blog/613287

重返人生2012-01-31 17:02:25

META-INF/MANIFEST.MF文件里有好多配置信息吧~