jar工具及JAR文件
jar是随JDK安装的,是JDK中自带的一个工具,在JDK安装目录下的bin目录中,Windows下文件名为jar.exe,Linux下文件名为jar。jar是一个归档和压缩工具,jar工具是基于zip和zlib创建出来的。使用jar工具打包压缩出来的文件称为JAR文件,即Java Archive File。顾名思义,它的应用是与Java息息相关的,是Java的一种文档格式。JAR文件非常类似ZIP文件,准确地说,它就是ZIP文件。JAR文件与ZIP文件唯一的区别就是在JAR文件的内容中,包含了一个META-INF目录,且该目录下有一个名称为MANIFEST.MF的文件,这个目录和文件是在使用jar工具生成JAR文件时自动创建的。
JAR文件包的扩展名是.jar
,在Windows平台上,我们直接可以将JAR文件的扩展名改成.zip,然后使用WinRAR工具打开。
JAR文件的目录结构
假设有一个简单的JAR文件,它的基本目录结构如下:
其中,com.bat.adsl是包结构。
若是可执行jar包,jar包中还有BOOT-INF目录,目录中会有该项目所有依赖的其他jar包,注意这块与普通jar包的区别,因为可执行jar是直接跑起来的,所以它依赖的第三方jar必然被打包进自身的jar文件中。
jar命令格式及参数
jar命令的使用格式如下:
1 | jar {ctxu} [vfm0M] [jar-filename] [manifest-filename] [-C 目录] 文件名 ... |
jar命令各个选项和参数说明如下:
1 | c #创建新的JAR文件包 |
jar命令使用举例
(1)jar cf test.jar test
该命令没有执行过程的显示,执行结果是在当前目录生成了test.jar文件。
(2)jar cvf test.jar test
该命令与上例中的结果相同,但是由于v参数的作用,显示出了打包过程。
(3)jar cvfM test.jar test
该命令与(2)结果类似,但在生成的test.jar中没有包含META-INF/MANIFEST文件。
(4)jar cvfm test.jar manifest.mf test
运行结果与(2)相似,显示信息也相同,只是生成JAR包中的META-INF/MANIFEST是我们指定的manifest.mf文件的内容,而不是jar工具默认生成的META-INF/MANIFEST文件内容。
(5)jar tf test.jar
或jar tvf test.jar
在test.jar已经存在的情况下,可以查看test.jar中的内容,但并不会解压test.jar包文件哦。
(6)jar xf test.jar
或jar xvf test.jar
解压缩test.jar归档文件到当前目录。
使用jar工具创建可执行jar文件
(1)编写Java代码,并使用javac编译
(2)创建MANIFEST.MF文件
这个MANIFEST.MF文件可以放在任何位置,也可以是其它任意文件名,但要创建可执行JAR包,MANIFEST.MF文件必须要有Main-Class: test.Test
一行,且该行以一个回车符结束即可。Main-Class这一行指明了JAR包的执行入口,即包含了public static void main(String[] args)
方法的类。
(3)执行打包命令jar cvfm test.jar manifest.mf test
(4)执行java -jar test.jar
命令来执行可执行jar文件
一个典型MANIFEST.MF
MANIFEST.MF文件是JAR归档文件的清单文件,默认情况下,JAR文件中都包含了该文件,除非在生成JAR文件特别执行不需要MANIFEST.MF文件。
一个典型的MANIFEST.MF的文件内容如下:
1 | Manifest-Version: 1.0 |
一个稍复杂的可执行的SpringBoot JAR应用的MANIFEST.MF的文件内容如下:
1 | Manifest-Version: 1.0 |
其他闲杂知识
(1)我们可以使用Eclipse IDE来生成jar文件,当然也可以使用Maven工具来生成jar文件。
学习资料参考于:
https://blog.csdn.net/xlgen157387/article/details/23126933