《疯狂Java讲义》(十八)---- JAR文件

Posted coder为

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了《疯狂Java讲义》(十八)---- JAR文件相关的知识,希望对你有一定的参考价值。

  • 使用JAR文件  

  JAR文件全称Java ARchive File, java档案文件。 通常JAR文件是一种压缩文件,通常称为JAR包。JAR文件和ZIP文件的区别是JAR文件默认包含了一个名为META-INF/MANIFEST.MF的清单文件,这个清单文件时在生成JAR文件时由系统自动创建的。

  当开发了一个应用程序后,这个应用程序包含了很多类,如果需要把这个应用程序提供给别人使用,通常会将这些类文件打包给一个JAR文件,把这个jar文件提供给别人使用。 只要别人在系统的CLASSPATH环境变量中添加这个JAR文件,则JVM就可以自动在内存中解压这个JAR包,把这个JAR包当成一个路径,在这个路径中查找所需要的类或包层次对应的路径结构。

  jar是随JDK自动安装的,在JDK安装目录下的bin目录中。

 

  • JAR命令详解
  1.  创建JAR文件:jar cf test.jar test

  该命令不显示压缩过程。将当前路径下的test路径下的全部内容生成一个test.jar文件。如果当前目录中已经存在test.jar文件,那么该文件将被覆盖。

  2.    创建JAR文件,并显示压缩过程:jar cvf test.jar test

  同1命令,但是因为多了-v参数,会显示打包过程。

  3.    不是用清单文件:jar cvfM test.jar test

  同2,但是M选项表示不生成清单文件,所以打出的test.jar包中不包含META-INF/MANIFEST.MF文件,打包过程信息也略有差异。

  4.   自定义清单文件内容:jar cvfm test.jar manifest.mf test

   与2相似,显示信息也相同,但是小写m选项指定读取用户清单文件信息,因此在生成的JAR包中清单文件META-INF/MANIFEST.MF的内容有所不同,它会在打出来的清单文件基础上增加自定义manifest.mf文件的内容。

  清单内容由key:<空格>value组成,每行只能定义一个key-value对,每行的key-value对之前不能有空格,必须顶格写。文件内容开头不能空行,文件必须以一个空行结束。

  5.  查看JAR包内容:jar tf test.jar

  6.    查看JAR包详细内容(size, last update time):jar tvf test.jar

  7.    解压缩:jar xf test.jar

  8.    带提示信息解压缩:jar xvf test.jar 

  9.    更新JAR文件:jar uf test.jar Hello.class

  如果test.jar中已有Hello.class文件,则使用新的Hello.class文件替换原来的Hello.class文件,如果test.jar 中没有Hello.class文件,则把新的Hello.class文件添加到test.jar文件中。

  10.  更新时显示详细信息:jar uvf test.jar Hello.class

 

  • 创建可执行的JAR包

  当一个应用程序开发成功后,大致有三种发布方式:

  1. 使用平台相关的编译器将整个应用编译成平台相关的可执行性文件。这种方式常常需要第三方编译器支持,而且编译器生成的可执行性文件丧失了跨平台特性,甚至可能有一定的性能下降。
  2. 为应用编译一个批处理文件(bash脚本),例如:java package.MainClass 当用户单击上面的bash脚本,就会执行java命令,从而运行程序主类
  3. 将一个应用程序制作成可执行的JAR包,通过JAR包来发布应用程序。这也是比较典型的方法。

  

  创建可执行的JAR包的关键在于:让javaw命令知道JAR包中哪个类是主类,javaw命令可以通过运行该主类来运行程序。jar命令中有一个-e选项,该选项指定JAR宝忠作为程序入口的主类的类名:

    jar cvfe test.jar Test *.class

  上面命令把当前目录下的所有*.class文件都压缩到test.jar包中,并指定使用Test类作为程序入口。

  

  • JAR包技巧

  在linux下,使用unzip来解压jar包,如果需要将文件解压缩到指定目录下,只需要指定一个-d选项即可。

以上是关于《疯狂Java讲义》(十八)---- JAR文件的主要内容,如果未能解决你的问题,请参考以下文章

《疯狂Java讲义》(十九)---- 与用户交互

疯狂Java讲义-读书笔记1.5 第一个Java程序

Java学习疯狂Java讲义——Java语言概述与开发环境

java8--类加载机制与反射(java疯狂讲义3复习笔记)

《疯狂java讲义》读后感

学在前面——《疯狂JAVA讲义》学习笔记