JAR命令详解.doc_第1页
JAR命令详解.doc_第2页
JAR命令详解.doc_第3页
JAR命令详解.doc_第4页
JAR命令详解.doc_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

cmd进入你存放class文件的路径下执行jar cvf XXX.jar *.* (JDK的bin目录必须在环境变量path里设置过)附jar相关知识:JAR(Java Archive,Java 归档文件)是与平台无关的文件格式,它允许将许多文件组合成一个压缩文件。为 J2EE 应用程序创建的 JAR 文件是 EAR 文件(企业 JAR 文件)。JAR 文件格式以流行的 ZIP 文件格式为基础。与 ZIP 文件不同的是,JAR 文件不仅用于压缩和发布,而且还用于部署和封装库、组件和插件程序,并可被像编译器和 JVM 这样的工具直接使用。在 JAR 中包含特殊的文件,如 manifests 和部署描述符,用来指示工具如何处理特定的 JAR。一个 JAR 文件可以用于: 用于发布和使用类库 作为应用程序和扩展的构建单元 作为组件、applet 或者插件程序的部署单位 用于打包与组件相关联的辅助资源 JAR 文件格式提供了许多优势和功能,其中很多是传统的压缩格式如 ZIP 或者 TAR 所没有提供的。它们包括:安全性。 可以对 JAR 文件内容加上数字化签名。这样,能够识别签名的工具就可以有选择地为您授予软件安全特权,这是其他文件做不到的,它还可以检测代码是否被篡改过。减少下载时间。 如果一个 applet 捆绑到一个 JAR 文件中,那么浏览器就可以在一个 HTTP 事务中下载这个 applet 的类文件和相关的资源,而不是对每一个文件打开一个新连接。压缩。JAR 格式允许您压缩文件以提高存储效率。传输平台扩展。 Java 扩展框架(Java Extensions Framework)提供了向 Java 核心平台添加功能的方法,这些扩展是用 JAR 文件打包的(Java 3D 和 JavaMail 就是由 Sun 开发的扩展例子)。包密封。 存储在 JAR 文件中的包可以选择进行密封,以增强版本一致性和安全性。密封一个包意味着包中的所有类都必须在同一 JAR 文件中找到。包版本控制。 一个 JAR 文件可以包含有关它所包含的文件的数据,如厂商和版本信息。可移植性。 处理 JAR 文件的机制是 Java 平台核心 API 的标准部分。 jar 命令详解 jar 是随 JDK 安装的,在 JDK 安装目录下的 bin 目录中,Windows 下文件名为 jar.exe,Linux 下文件名为 jar。它的运行需要用到 JDK 安装目录下 lib 目录中的 tools.jar 文件。不过我们除了安装 JDK 什么也不需要做,因为 SUN 已经帮我们做好了。我们甚至不需要将 tools.jar 放到 CLASSPATH 中。 使用不带任何的 jar 命令我们可以看到 jar 命令的用法如下: jar ctxuvfm0M jar-文件 manifest-文件 -C 目录 文件名 . 其中 ctxu 是 jar 命令的子命令,每次 jar 命令只能包含 ctxu 中的一个,它们分别表示: -c创建新的 JAR 文件包 -t列出 JAR 文件包的内容列表 -x展开 JAR 文件包的指定文件或者所有文件 -u更新已存在的 JAR 文件包 (添加文件到 JAR 文件包中)vfm0M 中的选项可以任选,也可以不选,它们是 jar 命令的选项参数 -v生成详细报告并打印到标准输出 -f指定 JAR 文件名,通常这个参数是必须的 -m指定需要包含的 MANIFEST 清单文件 -0只存储,不压缩,这样产生的 JAR 文件包会比不用该参数产生的体积大,但速度更快 -M不产生所有项的清单(MANIFEST文件,此参数会忽略 -m 参数 jar-文件 即需要生成、查看、更新或者解开的 JAR 文件包,它是 -f 参数的附属参数 manifest-文件 即 MANIFEST 清单文件,它是 -m 参数的附属参数 -C 目录 表示转到指定目录下去执行这个 jar 命令的操作。它相当于先使用 cd 命令转该目录下再执行不带 -C 参数的 jar 命令,它只能在创建和更新 JAR 文件包的时候可用。 文件名 . 指定一个文件/目录列表,这些文件/目录就是要添加到 JAR 文件包中的文件/目录。如果指定了目录,那么 jar 命令打包的时候会自动把该目录中的所有文件和子目录打入包中。 如果一个文件名是一个目录,它将被递归处理。 清单(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 (应该是hello.jar吧)这样我们使用了我们自己的MANIFEST.MF文件对原来默认的进行了更新。你不妨可以再进去看看是不是添上了Main-Class: HelloWorld这一句。 (是吗,我怎么没试出来,提示java.io.FileNotFoundException:MANIFEST.MF(系统找不到指定的文件)怎么回事?)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(); out.println(); out.println(); out.println(Hello, World!); out.println(); /end here! 对它编译。下面是web.xml:helloHelloWorldhello/HelloWorld在命令提示符下进到先前创制的hello目录下,执行 jar cvf hello.war * ,我们便得到hello.war。将它拷贝至webapps目录下,ok,来看最后一步,打开tomcat的目录conf中的server.xml,加入:大功告成!运行它,启动tomcat,后在浏览器中输入http:/localhost:8080/hello/HelloWorld,有了吗? 最后,如果你想用ant来完成以上的打包活动,下面就告诉你:对于jar来说。在build.xml中, 对于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-dont 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下面举一些例子来说明 jar 命令的用法: 1) jar cf test.jar test 该命令没有执行过程的显示,执行结果是在当前目录生成了 test.jar 文件。如果当前目录已经存在 test.jar,那么该文件将被覆盖。 2) jar cvf test.jar test 命令与上例中的结果相同,但是由于 v 参数的作用,显示出了打包过程,如下: 标明清单(manifest) 增加:test/(读入= 0) (写出= 0)(存储了 0%) 增加:test/Test.class(读入= 7) (写出= 6)(压缩了 14%) 3) jar cvfM test.jar test 该命令与 2) 结果类似,但在生成的 test.jar 中没有包含 META-INF/MANIFEST 文件,打包过程的信息也略有差别: 增加:test/(读入= 0) (写出= 0)(存储了 0%)增加:test/Test.class(读入= 7) (写出= 6)(压缩了 14%) 4) jar cvfm test.jar manifest.mf test 运行结果与 2) 相似,显示信息也相同,只是生成 JAR 包中的 META-INF/MANIFEST 内容不同,是包含了 manifest.mf 的内容 5) jar tf test.jar 在 test.jar 已经存在的情况下,可以查看 test.jar 中的内容,如对于 2) 和 3) 生成的 test.jar 分别应该此命令,结果如下; 对于 2) META-INF/ META-INF/MANIFEST.MF test/ test/Test.class 对于 3) test/ test/Test.class 5) jar tvf test.jar 除显示 5) 中显示的内容外,还包括包内文件的详细信息,如: 0 Wed Jun 19 15:39:06 GMT 2002 META-INF/ 86 Wed Jun 19 15:39:06 GMT 2002 META-INF/MANIFEST.MF 0 Wed Jun 19 15:33:04 GMT 2002 test/ 7 Wed Jun 19 15:33:04 GMT 2002 test/Test.class 7) jar xf test.jar 解开 test.jar 到当前目录,不显示任何信息,对于 2) 生成的 test.jar,解开后的目录结构如下: = - META-INF - MANIFEST - test -Test.class 8) jar xvf test.jar 运行结果与 7) 相同,对于解压过程有详细信息显示,如: 创建:META-INF/ 展开:META-INF/MANIFEST.MF 创建:test/ 展开:test/Test.class 9) jar uf test.jar manifest.mf 在 test.jar 中添加了文件 manifest.mf,此使用 jar tf 来查看 test.jar 可以发现 test.jar 中比原来多了一个 manifest。这里顺便提一下,如果使用 -m 参数并指定 manifest.mf 文件,那么 manifest.mf 是作为清单文件 MANIFEST 来使用的,它的内容会被添加到 MANIFEST 中;但是,如果作为一般文件添加到 JAR 文件包中,它跟一般文件无异。 10) jar uvf test.jar manifest.mf 与 9) 结果相同,同时有详细信息显示,如: 增加:manifest.mf(读入= 17) (写出= 19)(压缩了 -11%) 4. 关于 JAR 文件包的一些技巧 1) 使用 unzip 来解压 JAR 文件 在介绍 JAR 文件的时候就已经说过了,JAR 文件实际上就是 ZIP 文件,所以可以使用常见的一些解压 ZIP 文件的工具来解压 JAR 文件,如 Windows 下的 WinZip、WinRAR 等和 Linux 下的 unzip 等。使用 WinZip 和 WinRAR 等来解压是因为它们解压比较直观,方便。而使用 unzip,则是因为它解压时可以使用 -d 参数指定目标目录。 在解压一个 JAR 文件的时候是不能使用 jar 的 -C 参数来指定解压的目标的,因为 -C 参数只在创建或者更新包的时候可用。那么需要将文件解压到某个指定目录下的时候就需要先将这具 JAR 文件拷贝到目标目录下,再进行解压,比较麻烦。如果使用 unzip,就不需要这么麻烦了,只需要指定一个 -d 参数即可。如: unzip test.jar -d dest/ 2) 使用 WinZip 或者 WinRAR 等工具创建 JAR 文件 上面提到 JAR 文件就是包含了 META-INF/MANIFEST 的 ZIP 文件,所以,只需要使用 WinZip、WinRAR 等工具创建所需要 ZIP 压缩包,再往这个 ZIP 压缩包中添加一个包含 MANIFEST 文件的 META-INF 目录即可。对于使用 jar 命令的 -m 参数指定清单文件的情况,只需要将这个 MANIFEST 按需要修改即可。 3) 使用 jar 命令创建 ZIP 文件 有些 Linux 下提供了 unzip 命令,但没有 zip 命令,所以需要可以对 ZIP 文件进行解压,即不能创建 ZIP 文件。如要创建一个 ZIP 文件,使用带 -M 参数的 jar 命令即可,因为 -M 参数表示制作 JAR 包的时候不添加 MANIFEST 清单,那么只需要在指定目标 JAR 文件的地方将 .jar 扩展名改为 .zip 扩展名,创建的就是一个不折不扣的 ZIP 文件了,如将上一节的第 3) 个例子略作改动: - 如果只想看一下有什么东东,用winrar也可以看。 :jar ctxuvfm0M 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/ . - jar cvf flight.jar aaaa1 aaaa2 文件名后面是你要压缩的文件所在的目录,可以跟多个 - jar cvf class.jar GreetingServlet.class 22.class 33.class 创建jar包 如果你要查看tools.jar中的内容,用解压缩软件(比如rar)解开就可以看了关于jar打包Java 2009-07-13 15:13:56 阅读149 评论0 字号:大中小 通常我们在eclipse下export,或者在命令行中打入jar-cvfname.jar*.*(jarctxuvfm0Mjar-文件manifest-文件-C目录文件名.关于这个介绍很多。)对初学者来说,最想知道的莫过于怎么打包成双击可以运行的jar,以炫耀自己刚刚编的程序,就好像小时候自己第一次做饭,做得再难吃自己都吃得津津有味,而且老有成就感了。可这里介绍2种方式打包成可执行jar,分别是在命令行(相对比较繁琐)和在IDE(MyEclipse。)下。1. 由简单的开始介绍,在Myeclipse下。发现不少人都在找如何能够像.exe文件那样通过双击来运行java所编写的程序。网上的一般都是通过命令的方式来生成的,比较麻烦。呵呵,其实Eclipse中已经有这一功能了,而且很方便。1. 右击工程名-Export.,如下图2. 选择Java/JARfile-Next3. 这里jar_test(即你所要打包的工程)是默认勾选的,如果没有勾选,则勾上;并在下面输入打包后的文件名,这里可以选择文件路径,默认保存在你的工作目录(workspase)下4. 4.点击Browse按钮,选择程序入口类5.选择程入口类,即main方法所在的类,点“OK”,回到上一个对话框,然后“Finish”。好了,现在就可以去双击所打包的.jar文件了,但是你看不到运行的结果(图形界面程序可以这样运行)。哈哈,不用着急。可以进入控制台,运行如下命令:文件所在路径java-jar文件名.jar呵呵,不是结果出来了。2.使用jar命令创建可执行的jar包1、创建可执行的jar包。(不依赖其他包)手工写manifest.mf文件(jar命令自动生成的MANIFEST.MF文件中不会包含Main-Class属性),举例说明:目录结构:mymanifest.mf/该文件可以随意放置,只要在执行jar命令时指定mymanifest.mf文件所在位置.-src-testTest.classtest.Test代码:1packagetest;2publicclassTest3 publicstaticvoidmain(Stringargs)4System.out.println(HelloWorld!);564 mymanifest.mf文件内容:5 Manifest-Version:1.0/该属性是创建可执行jar包必需的,指定的Main-Class为全路径类名(且该类必需有main方法)Main-Class:test.TestCreated-By:wiflish在src目录下执行:jarcvfmtest.jar./mymanifest.完成后会在src目录下生成一个test.jar文件。由于没有可视化界面,双击test.jar将会看到没反应。在命令行执行java-jartest.jar就会得到输出HelloWorld!这时就完成了基本的创建可执行的jar包。2、创建要依赖其他包的可执行jar包。这时只要更改mymanifest.mf文件加入(class-path):Manifest-Version:1.0/该属性是创建可执行jar包必需的,指定的Main-Class为全路径类名(且该类必需有main方法)Main-Class:test.Test/该属性指定依赖包的路径(路径是相对jar包所在路径)Class-Path:lib/swing-layout-1.0.jar/这里举例说明,随便用的包Created-By:wiflish目录结构:-src-testTestDepends.class/假设该类执行依赖于swing-layout-1.0.jar,具体代码略。testDepends.jar-libswing-layout-1.0.jar双击testDepends.jar就能正确执行,如果TestDepends.jar包所在的当前目录下没有lib/swing-layout-1.0.jar的话,如下目录结构:-src-testTestDepends.class/假设该类执行依赖于swing-layout-1.0.jar,具体代码略。testDepends.jar双击testDepends.

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论