先打开命令提示符(win2000或在运行筐里执行cmd命令,win98为DOS提示符),输入jar –help,然后回车(如果你盘上已经有了jdk1.1或以上版本),看到什么:
用法:jar {ctxu}[vfm0Mi] [jar-文件] [manifest-文件] [-C 目录] 文件名 …
选项:
-c 创建新的存档
-t 列出存档内容的列表
-x 展开存档中的命名的(或所有的〕文件
-u 更新已存在的存档
-v 生成详细输出到标准输出上
-f 指定存档文件名
-m 包含来自标明文件的标明信息
-0 只存储方式;未用ZIP压缩格式
-M 不产生所有项的清单(manifest〕文件
-i 为指定的jar文件产生索引信息
-C 改变到指定的目录,并且包含下列文件:
如果一个文件名是一个目录,它将被递归处理。
清单(manifest〕文件名和存档文件名都需要被指定,按’m’ 和 ‘f’标志指定的相同顺序。
示例1:将两个class文件存档到一个名为 ‘classes.jar’ 的存档文件中:
jar cvf classes.jar Foo.class Bar.class
示例2:用一个存在的清单(manifest)文件 ‘mymanifest’ 将 foo/ 目录下的所有
文件存档到一个名为 ‘classes.jar’ 的存档文件中:
jar cvfm classes.jar mymanifest -C foo/ .
来个小例子试试看:
我们只有一个HelloWorld,如下:
public class HelloWorld{
public static void main(String[] args){
System.out.println(“Hi, Hello World!”);
}
}
我将这个java文件存到C盘跟目录下,ok,接下来,
在先前打开的命令提示符下(跳转到C盘提示符下),我们输入javac HelloWorld.java,然后继续输入:jar cvf hello.jar HelloWorld.class,回车后去你的C盘看看,多了什么,没错 hello.jar 。
基本的步骤我们现在都知道了,你可以自己去尝试一下随着jar后面的参数的不同,结果有什么变化。
紧接着我们看看如何运行我们的jar包。
在进入正题之前,你要先打开我们刚刚做好的jar包看看,多了什么呢,META-INF目录?再看看里面是什么,还有一个MANIFEST.MF文件是不是?用文本编辑器(我这里是UltraEdit)打开它看看:
Manifest-Version: 1.0
Created-By: 1.4.2 (Sun Microsystems Inc.)
就是这样。这里我们对它进行修改,加一句:Main-Class: HelloWorld (在第三行)。这个就是我们之前写的那个类,也就是我们的入口类。也即,
Manifest-Version: 1.0
Created-By: 1.4.2 (Sun Microsystems Inc.)
Main-Class: HelloWorld
接下来,我们在命令提示符里执行:
jar umf MANIFEST.MF app.jar
这样我们使用了我们自己的MANIFEST.MF文件对原来默认的进行了更新。你不妨可以再进去看看是不是添上了Main-Class: HelloWorld这一句。
Ok,这个最后的一步了,来验证我们做的一切,在命令提示符中输入:
java -jar hello.jar(执行)
出现了什么,――Hi, Hello World!
我们再来看看jar文件在tomcat中发布,注意:在tomcat中我们就不能再用jar这种格式,而改war格式,它是专门用于web应用的,其实整个过程下来基本上和jar是类似的:
先准备我们要打包的资源。
找到存放tomcat的webapps目录,进到其中,新建一个文件夹,这里命名为hello,再进去新建WEB-INF文件夹,再进去新建classes文件夹,此时我们也将我们唯一的servlet,HelloWorld.java放到这里,在与classes目录同级下建立一文件web.xml。Ok,目前我们初步建立了一个简单的web应用。
这是HelloWorld.java:
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class HelloWorld extends HttpServlet {
public void doGet(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException {
res.setContentType("text/html");
PrintWriter out = res.getWriter();
out.println("<HTML>");
out.println("<HEAD><TITLE>Hello, World!</TITLE></HEAD>");
out.println("<BODY>");
out.println("Hello, World!");
out.println("</BODY></HTML>");
}
}//end here!
对它编译。下面是web.xml:
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE web-app PUBLIC
‘-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN’
‘ http://java.sun.com/j2ee/dtds/web-app_2_3.dtd& #39;>
<web-app>
<servlet>
<servlet-name>hello</servlet-name>
<servlet-class>HelloWorld</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>hello</servlet-name>
<url-pattern>/HelloWorld</url-pattern>
</servlet-mapping>
</web-app>
开始压缩,形成war档:
在命令提示符下进到先前创制的hello目录下,执行 jar cvf hello.war * ,我们便得到hello.war。将它拷贝至webapps目录下,ok,来看最后一步,打开tomcat的目录conf中的server.xml,加入:
<Context path="/hello" docBase="hello.war" debug="0"
reloadable="true"/>
大功告成!运行它,启动tomcat,后在浏览器中输入 http://localhost:8080/hello/HelloWorld ,有了吗?
最后,如果你想用ant来完成以上的打包活动,下面就告诉你:
对于jar来说。在build.xml中,
<target name="jar">
<jar destfile="${app_home}/hello.jar">
<fileset dir="${dest}" includes="**"/>
<!–fileset dir="${dest}" includes="**/action.properties"/–>
</jar>
</target>
对于war,
<war warfile="hello.war" webxml="./WEB-INF/web.xml">
<fileset dir="html"/>
<lib dir="lib/">
<exclude name="oracle*.jar"/>
</lib>
<classes dir="build/servlets">
<include name="**/*.class"/>
</classes>
</war>
好了,就这么多,希望对你有点帮助。:)
我上传了上面打过的两个包,hello.jar和hello.war。
第一rar文件对应的是hello.jar,下载后将其名改为hello.jar
第二rar文件对应hello.war,下载后改为hello.war。
这是由于上传不了jar格式和war格式的文件,你只好照我上面说的去做了 :)
补充:
############
jar基本操作:
############
1. 创建jar文件
jar cf jar-file input-file(s)
c—want to Create a JAR file.
f—want the output to go to a file rather than to stdout.
eg: 1)jar cf myjar.jar query_maintain_insert.htm
2)jar cvf myjar.jar query_maintain_insert.htm
v—Produces verbose(详细的) output.
3)jar cvf myjar.jar query_maintain_insert.htm mydirectory
4)jar cv0f myjar.jar query_maintain_insert.htm mydirectory
0—don’t want the JAR file to be compressed.
5)jar cmf MANIFEST.MF myjar.jar yahh.txt
m—Used to include manifest information from an existing manifest file.
6)jar cMf MANIFEST.MF myjar.jar yahh.txt
M—the default manifest file should not be produced.
7)jar cvf myjar.jar *
*—create all contents in current directory.
2. 察看jar文件
jar tf jar-file
t—want to view the Table of contents of the JAR file.
eg: 1)jar vft yahh.jar
v—Produces verbose(详细的) output.
3. 提取jar文件
jar xf jar-file [archived-file(s)]
x—want to extract files from the JAR archive.
eg: 1)jar xf yahh.jar yahh.txt(仅提取文件yahh.txt)
2)jar xf yahh.jar alex/yahhalex.txt(仅提取目录alex下的文件yahhalex.txt)
3)jar xf yahh.jar(提取该jar包中的所有文件或目录)
4. 修改Manifest文件
jar cmf manifest-addition jar-file input-file(s)
m—Used to include manifest information from an existing manifest file.
5. 更新jar文件
jar uf jar-file input-file(s)
u—want to update an existing JAR file.
Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1421162
结构
jar [ options ] [manifest] destination input-file [input-files]
说明
jar 工具是个 java 应用程序,可将多个文件合并为单个 JAR 归档文件。jar 是个多功能的归档及压缩工具,它基于 ZIP 和 ZLIB 压缩格式。然而,设计 jar 的主要目的是便于将 java applet 或应用程序打包成单个归档文件。将 applet 或应用程序的组件( .class 文件、图像和声音)合并成单个归档文件时,可以用 java 代理(如浏览器)在一次 HTTP 事务处理过程中 对它们进行下载,而不是对每个组件都要求一个新连接。这大大缩短了下载时间。jar 还能压缩文件,从而进一步缩短了下载时间。此外,它允许 applet 的作者对文件中的各个项进行签名,从而可认证其来源。jar 工具的语法基本上与 tar 命令的语法相同。
jar 工具的输入文件分为三种类型:
清单文件(可选)
目标 jar 文件
待归档的文件
通常用法是:
% jar cf myjarfile *.class
在这个示例中,当前目录中的所有类文件都被放置到名为 "myjarfile" 的文件中。清单文件由 jar 工具自动生成,并且始终是 jar 文件的第一项。缺省情况下,它被命名为 META-INF/MANIFEST.MF。清单文件是存储与归档有关的元信息的地方。有关如何将元信息储存到清单文件的详细信息,参见清单规范。
如果事先已有一个清单文件且希望 jar 工具将它用于新的 jar 归档,则可以用 -m 选项来指定它:
% jar cmf myManifestFile myJarFile *.class
清单使用 RFC822 ascii 格式,因此,很容易查看和处理“清单文件”目录。
选项
可用以字母 ‘@’ 开头的参数指定包含额外参数的文件,此文件一行一个参数。这些参数插入命令行的 ‘@<filename>’ 参数所在之处。
c
在标准输出上创建新归档或空归档。
t
在标准输出上列出目录表。
x file
从标准输入提取所有文件,或只提取指定的文件。如果省略了 file,则提取所有文件;否则只提取指定文件。
f
第二个参数指定要处理的 jar 文件。在 c (创建)情形中,第二个参数指的是要创建的 jar 文件的名称(不是在标准输出上)。在 t(表)或 x(提取)这两种情形中,第二个参数指定要列出或提取的 jar 文件。
v
在标准输出设备上生成冗长的输出结果。
m
包括指定的现有清单文件中的清单信息。用法举例:
jar cmf myManifestFile myJarFile *.class
0
只储存,不进行 ZIP 压缩。
M
不创建项的清单文件。
u
通过添加文件或更改清单来更新现有的 JAR 文件。例如:
jar -uf foo.jar foo.class
将文件 foo.class 添加到现有的 JAR 文件 foo.jar 中,而
jar umf manifest foo.jar
则用 manifest 中的信息更新 foo.jar 的清单。
-C
在执行 jar 命令期间更改目录。例如:
jar -uf foo.jar -C classes *
将 classes 目录内的所有文件加到 foo.jar 中,但不添加类目录本身。
如果有的“files”是目录,则该目录将被递归处理。
示例
将某个特定目录中的所有文件加到归档文件中:
C:\WWWROOT\JAVA> ls
12/09/96 12:20a <DIR> .
12/09/96 12:17a <DIR> ..
12/09/96 12:18a 1,010 0.au
12/09/96 12:18a 946 1.au
12/09/96 12:18a 1,039 2.au
12/09/96 12:18a 993 3.au
12/09/96 12:18a 1,006 4.au
12/09/96 12:18a 1,016 5.au
12/09/96 12:18a 1,048 6.au
12/09/96 12:18a 980 7.au
12/09/96 12:18a 1,064 8.au
12/09/96 12:18a 989 9.au
12/09/96 12:19a 48,072 spacemusic.au
12/09/96 12:19a 527 at_work.gif
12/09/96 12:19a 12,818 monkey.jpg
12/09/96 12:19a 16,242 Animator.class
12/09/96 12:20a 3,368 Wave.class
17 File(s) 91,118 bytes
414,983,168 bytes free
C:\WWWROOT\JAVA> jar cvf bundle.jar *
adding: 0.au
adding: 1.au
adding: 2.au
adding: 3.au
adding: 4.au
adding: 5.au
adding: 6.au
adding: 7.au
adding: 8.au
adding: 9.au
adding: Animator.class
adding: Wave.class
adding: at_work.gif
adding: monkey.jpg
adding: spacemusic.au
C:\WWWROOT\JAVA>
如果您的 html 目录中已有图像、音频文件和类的子目录,可以将每个目录归档到单个 jar 文件中:
C:\WWWROOT\JAVA> DIR
12/09/96 12:11a <DIR> .
12/09/96 12:17a <DIR> ..
12/03/96 06:54p <DIR> audio
12/06/96 02:02p <DIR> images
12/09/96 12:10a <DIR> classes
6 File(s) 207,360 bytes
414,983,168 bytes free
C:\WWWROOT\JAVA> jar cvf bundle.jar audio classes images
adding: audio/1.au
adding: audio/2.au
adding: audio/3.au
adding: audio/spacemusic.au
adding: classes/Animator.class
adding: classes/Wave.class
adding: images/monkey.jpg
adding: images/at_work.gif
C:\WWWROOT\JAVA\Animator> dir
12/09/96 12:11a <DIR> .
12/09/96 12:17a <DIR> ..
12/09/96 12:11a 207,360 bundle.tar
12/03/96 06:54p <DIR> audio
12/06/96 02:02p <DIR> images
12/09/96 12:10a <DIR> classes
6 File(s) 207,360 bytes
414,983,168 bytes free
C:\WWWROOT\JAVA\Animator>
然后可以用 jar 工具和 "t" 选项查看 jarfile 中的项名:
C:\WWWROOT\JAVA\Animator> jar tf bundle.jar
META-INF/MANIFEST.MF
audio/1.au
audio/2.au
audio/3.au
audio/spacemusic.au
classes/Animator.class
classes/Wave.class
images/monkey.jpg
images/at_work.gif
C:\WWWROOT\JAVA\Animator>
用长格式进行列举(用 "v" 选项)将显示归档文件中各文件的更为详细的信息,例如各文件的大小和上次修改时间:
C:\WWWROOT\JAVA\Animator> jar tvf bundle.jar
145 Thu Aug 01 22:27:00 PDT 1996 META-INF/MANIFEST.MF
946 Thu Aug 01 22:24:22 PDT 1996 audio/1.au
1039 Thu Aug 01 22:24:22 PDT 1996 audio/2.au
993 Thu Aug 01 22:24:22 PDT 1996 audio/3.au
48072 Thu Aug 01 22:24:23 PDT 1996 audio/spacemusic.au
16711 Thu Aug 01 22:25:50 PDT 1996 classes/Animator.class
3368 Thu Aug 01 22:26:02 PDT 1996 classes/Wave.class
12809 Thu Aug 01 22:24:48 PDT 1996 images/monkey.jpg
527 Thu Aug 01 22:25:20 PDT 1996 images/at_work.gif
C:\WWWROOT\JAVA\Animator>