解压jar包。有的包就是没反应,探索中
➜ jar -xvf spring-boot-starter.jar -C unjar/
用法: 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/ .
扩展:
你提到的命令:
bash
jar -xvf ./spring-boot-starter.jar
以及:
bash
jar -xvf ./spring-boot-starter.jar -C ./
我们来逐一解释它们的作用,并分析为什么你执行后 没有输出,也没有解压文件。
一、命令结构解析
bash
jar {ctxui}[vfmn0PMe] [jar-file] [manifest-file] [entry-point] [-C dir] files ...
jar
是 Java 的归档工具,用于创建、查看、提取.jar
文件。x
表示 提取(extract)。v
表示 详细输出(verbose),会列出提取的每个文件。f
表示 指定 jar 文件名,后面必须跟文件名。
所以:
bash
jar -xvf spring-boot-starter.jar
表示:从 spring-boot-starter.jar
中提取所有内容,并输出详细信息。
为什么没有输出?
可能原因如下:
1. 文件不存在或路径错误
你执行命令时,系统没有报错,但也没有任何输出,可能是因为:
spring-boot-starter.jar
不在当前目录中。- 或者你输入的文件名有误(比如大小写不一致、拼写错误等)。
验证方式:
bash
ls -l ./spring-boot-starter.jar
如果输出:
bash
No such file or directory
说明文件不存在,或路径不对。
2. JAR 文件内容为空或损坏
- 有可能这个
.jar
文件是空的,或者损坏了。 - 这时
jar -xvf
也不会报错,只是默默结束。
验证方式:
使用 jar -tf
查看 JAR 文件内容目录:
bash
jar -tf ./spring-boot-starter.jar
- 如果输出为空,说明 JAR 文件是空的。
- 如果报错
java.util.zip.ZipException
,说明文件损坏。
3. 权限问题
- 你没有读取该文件的权限。
- 可以通过
ls -l
检查权限。
正确的使用方式
示例 1:提取 JAR 文件到当前目录
bash
jar -xvf spring-boot-starter.jar
-x
:提取文件。-v
:显示详细信息。-f
:指定文件名。
这个命令会将 .jar
文件中的所有内容解压到 当前目录。
示例 2:提取 JAR 文件到指定目录
bash
mkdir -p ./unjar
jar -xvf spring-boot-starter.jar -C ./unjar/
-C ./unjar/
:表示提取完成后,切换到./unjar
目录下存放文件。- 这样可以避免文件污染当前目录。
举个完整例子
假设你有一个文件:
bash
ls -l
-rw-r--r-- 1 user staff 12345678 Jul 17 20:00 spring-boot-starter.jar
你可以这样提取:
bash
mkdir -p my_unjar
jar -xvf spring-boot-starter.jar -C my_unjar/
执行后你会看到类似输出:
text
created: my_unjar/META-INF/
inflated: my_unjar/META-INF/MANIFEST.MF
created: my_unjar/com/
created: my_unjar/com/example/
inflated: my_unjar/com/example/MyClass.class
...
总结
命令 | 含义 |
---|---|
jar -xvf file.jar |
提取 JAR 文件内容到当前目录 |
jar -xvf file.jar -C dir/ |
提取 JAR 文件内容到指定目录 dir/ |
jar -tf file.jar |
查看 JAR 文件的内容列表(不提取) |
建议操作流程
-
检查文件是否存在:
bashls -l ./spring-boot-starter.jar
-
查看 JAR 文件内容:
bashjar -tf ./spring-boot-starter.jar
-
创建目标目录并提取:
bashmkdir -p ./unjar jar -xvf ./spring-boot-starter.jar -C ./unjar/