jar 命令浅析
JAR 文件的全称是 Java Archive File,意思是 java 档案文件,通常 JAR 文件是一种压缩文件,并且与常见的 Zip 文件兼容,两者的区别便是 JAR 拥有清单文件(META-INF/MANIFEST.MF),这个文件是生成 JAR 文件时自动创建的。
jar 在安装 JDK 时会自动安装,在 bin 目录里面,Windows 里是 jar.exe,Lunix 里是 jar。
首先输入 jar 命令,系统会自动提示 jar 命令的用法。(运行 dos 命令使用的是 Cmder 软件,代码前面的“λ”不用输入)
λ jar
用法: jar {ctxui}[vfmn0PMe] [jar-file] [manifest-file] [entry-point] [-C dir] files ...
选项:
-c 创建新档案
-t 列出档案目录
-x 从档案中提取指定的 (或所有) 文件
-u 更新现有档案
-v 在标准输出中生成详细输出
-f 指定档案文件名
-m 包含指定清单文件中的清单信息
-n 创建新档案后执行 Pack200 规范化
-e 为捆绑到可执行 jar 文件的独立应用程序
指定应用程序入口点
-0 仅存储; 不使用任何 ZIP 压缩
-P 保留文件名中的前导 '/' (绝对路径) 和 ".." (父目录) 组件
-M 不创建条目的清单文件
-i 为指定的 jar 文件生成索引信息
-C 更改为指定的目录并包含以下文件
如果任何文件为目录, 则对其进行递归处理。清单文件名, 档案文件名和入口点名称的指定顺序
与 'm', 'f' 和 'e' 标记的指定顺序相同。示例 1: 将两个类文件归档到一个名为 classes.jar 的档案中:
jar cvf classes.jar Foo.class Bar.class
示例 2: 使用现有的清单文件 'mymanifest' 并
将 foo/ 目录中的所有文件归档到 'classes.jar' 中:
jar cvfm classes.jar mymanifest -C foo/ .
jar 文件结构类型
举例:
原文件目录结构为:
****
├ Foder
| ├file1
| ├file2
└ file3
则其生成的 jar 文件构内部目录结构:
****.jar
├ META-INF
│ └ MANIFEST.MF(清单文件)├ Foder
| ├file1
| └file2
└ file3
命令实例讲解
1.jar cf ………….
创建 jar 文件
语法如下:
jar cf ****.jar file1 file2 ….
创建 ****.jar,并将 file1,file2 (jar 命令可以指定多个文件) 添加到 ****.jar 包中,如 ****.jar 存在, 则覆盖。
jar cf ****.jar folderName
创建 ****.jar,并将 folderName 文件夹下所有文件添加到 ****.jar 包中,如 ****.jar 存在, 则覆盖。
2.jar cvf ………….
创建 jar 文件,并且显示压缩过程
会输出类似下面的信息。
已添加清单
正在添加: lzj.iml(输入 = 81) (输出 = 75)(压缩了 7%)
........
语法与第一个命令相似
3.jar cvfM ………….
创建 jar 文件, 但不添加清单文件,并且显示压缩过程.
会输出类似下面的信息。
正在添加: lzj.iml(输入 = 81) (输出 = 75)(压缩了 7%)
........
语法与第一个命令相似
4.jar cvfm ………..
创建 jar 文件, 自定义清单文件内容, 并且显示压缩过程.
语法:
jar cvfm ****.jar ****.mf(大小写皆可) FileName
在原有清单文件基础上增加 ****.mf 文件的内容(不论名称是什么都可以,但是 jar 包只认 manifest.MF, 所以系统会自动完成转化)
清单文件可直接编辑,但有相应的内容格式要求,这里不做过多介绍。
5.jar tf …………
查看 jar 包文件。
例如
λ jar tf lzj.jar
META-INF/
META-INF/MANIFEST.MF
lzj.iml
如果 JAR 包内文件非常多可使用(命令行窗口显示的行数有限)
jar tf lzj.jar > lzj.txt
此时将不再返回信息,文件夹下会生成一个 txt 文件,里面保存着相应的信息。
加 v,详细的查看 jar 包文件
即 jar tvf …………
例如
λ jar tvf lzj.jar
0 Sat Jul 20 16:18:02 CST 2019 META-INF/
69 Sat Jul 20 16:18:02 CST 2019 META-INF/MANIFEST.MF
81 Sun Dec 16 16:13:00 CST 2018 lzj.iml
也可生成 txt 文件。
6.jar xf …………….
解压缩,将 jar 文件解压到当前目录。不返回信息。
加 v,即 jar xvf …………….
系统会显示详细的解压过程
例如
λ jar xvf lzj.jar
已创建: META-INF/
已解压: META-INF/MANIFEST.MF
已创建: lzj/
已创建: lzj/.idea/
已解压: lzj/.idea/compiler.xml
已解压: lzj/.idea/encodings.xml
已解压: lzj/.idea/misc.xml
................
7.jar uf …………..
语法
jar uf ****.jar file
将文件加入到 jar 文件中,如果有同名文件则替。
加 v 同样可以详细看到过程
例如
λ jar uvf lzj.jar pom.xml
正在添加: pom.xml(输入 = 502) (输出 = 267)(压缩了 46%)
jar 命令扩展
jar i ****.jar
为指定的 jar 文件生成索引,生成在 META-INF 中名称为 INDEX.LIST。