- 使用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命令详解
- 创建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包
当一个应用程序开发成功后,大致有三种发布方式:
- 使用平台相关的编译器将整个应用编译成平台相关的可执行性文件。这种方式常常需要第三方编译器支持,而且编译器生成的可执行性文件丧失了跨平台特性,甚至可能有一定的性能下降。
- 为应用编译一个批处理文件(bash脚本),例如:java package.MainClass 当用户单击上面的bash脚本,就会执行java命令,从而运行程序主类
- 将一个应用程序制作成可执行的JAR包,通过JAR包来发布应用程序。这也是比较典型的方法。
创建可执行的JAR包的关键在于:让javaw命令知道JAR包中哪个类是主类,javaw命令可以通过运行该主类来运行程序。jar命令中有一个-e选项,该选项指定JAR宝忠作为程序入口的主类的类名:
jar cvfe test.jar Test *.class
上面命令把当前目录下的所有*.class文件都压缩到test.jar包中,并指定使用Test类作为程序入口。
- JAR包技巧
在linux下,使用unzip来解压jar包,如果需要将文件解压缩到指定目录下,只需要指定一个-d选项即可。