JAR及其操作详解

✅ 什么是 JAR
✅ 命令用法详解
✅ 常用场景和例子


🚀 【1️⃣ 什么是 JAR 文件】

  • JAR = Java ARchive

  • 本质上就是一个 .zip 文件

  • 用来打包:

    • .class 文件

    • 配置、资源文件

    • META-INF/MANIFEST.MF(清单文件)

✅ 主要用途:

  • 共享库(依赖)

  • 可执行应用

  • 分发 Java 插件


🚀 【2️⃣ JAR 命令结构】

Java 自带的 jar 工具用法是:

jar {ctxu}[vfm0MeiP] [jar-file] [manifest-file] [entry-point] [-C dir] files ...

✅ 重点选项:

选项作用
-c创建新 JAR
-t列出内容
-x解压
-u更新已有 JAR
-v详细输出
-f指定 JAR 文件名
-m使用指定的清单文件 MANIFEST.MF
-e指定可执行 JAR 的入口类(Main-Class)
-0仅存储(不压缩)
-M不自动生成清单文件
-i为 JAR 生成索引(Class-Path 优化)
-P保留绝对路径/父目录成分
-C进入目录再打包


🚀 【3️⃣ 最常用命令详解+例子】


✅ 3.1 创建 Jar

jar cf app.jar *

  • c = create

  • f = specify file

  • 把当前目录下所有文件打进 app.jar

jar cvf app.jar *

  • v = verbose,打印详细输出


✅ 3.2 列出内容

查看 jar 

jar tf app.jar

输出类似:

META-INF/MANIFEST.MF com/example/App.class com/example/Util.class


✅ 3.3 解压 Jar

把所有文件解出来

jar xf app.jar

✅ 解到当前目录

也可以指定某个文件:

jar xf app.jar com/example/App.class


✅ 3.4 更新 Jar

往已有 jar 里追加或替换文件

jar uf app.jar NewClass.class

✅ 很适合「补丁」


✅ 3.5 创建带清单文件

如果有自己写的 MANIFEST.MF:

Manifest-Version: 1.0 Main-Class: com.example.Main

打包命令:

jar cfm app.jar MANIFEST.MF *

  • m = manifest file

✅ 生成的 jar 会带这个 MANIFEST。


✅ 3.6 创建可执行 Jar

最常用的生产用法:

jar cfe myapp.jar com.example.Main -C build/classes .

解释:

  • c = create

  • f = file name

  • e = entry point(Main-Class)

  • -C build/classes . = 进入 build/classes 目录打包里面的所有文件

✅ 自动生成的 META-INF/MANIFEST.MF 会有

Main-Class: com.example.Main

✅ 运行方式:

java -jar myapp.jar


✅ 3.7 不压缩

存储但不 zip 压缩

jar cf0 app.jar *

  • 0 = store only

✅ 用在某些场景(比如解包更快)。


✅ 3.8 生成索引

大型 jar 的 Class-Path 优化

jar i app.jar

会在 jar 里生成:

META-INF/INDEX.LIST


✅ 3.9 指定目录打包(-C)

jar cf app.jar -C build/classes .

解释:

  • 进入 build/classes

  • 把里面的所有文件打包

  • 不会带 build/classes 这个前缀路径


🚀 【4️⃣ MANIFEST.MF详解】

每个 JAR 里的 META-INF/MANIFEST.MF 会记录信息,比如:

Manifest-Version: 1.0 Main-Class: com.example.Main Class-Path: lib/other.jar

✅ 作用

  • 声明可执行 jar 的主类

  • 指定依赖路径

  • 版本元信息


🚀 【5️⃣ 解包 / 修改 / 重打包**

⚡️ 5.1 解包

mkdir tmp

cd tmp

jar xf ../app.jar


⚡️ 5.2 替换内容

cp ../MyFixedClass.class com/example/


⚡️ 5.3 重打包

保留原 MANIFEST

jar cfm ../app-patched.jar META-INF/MANIFEST.MF *

✅ 这样就「替换」了 JAR 里原来的类。


🚀 【6️⃣ 结合 unzip 命令】

因为 JAR = ZIP,本质上任何 unzip 工具都能用:

✅ 查看

unzip -l app.jar

✅ 解压

unzip app.jar -d out/

✅ 修改后重新压

zip -r app-patched.jar *


🚀 【7️⃣ 常见场景总结】

✅ 查看里面有什么

jar tf mylib.jar

✅ 解开

jar xf mylib.jar

✅ 更新

jar uf mylib.jar NewClass.class

✅ 自己写主类

jar cfe app.jar com.example.Main -C build/classes .

✅ 指定外部 manifest

jar cfm app.jar MyManifest.mf -C build/classes .

✅ 合并多个 jar

  • 解包所有

  • 合并目录

  • 去重

  • 重新打包

✅ 生产构建

  • Maven Shade Plugin

  • Gradle Shadow Plugin


✅ 【重点总结】

JAR = ZIP 包含 .class 和 MANIFEST.MF,用 jar 命令或 unzip 都能操作。

  • 查看 → jar tf

  • 解压 → jar xf

  • 创建 → jar cf

  • 更新 → jar uf

  • 指定入口类 → jar cfe

  • 用外部清单 → jar cfm

  • 进入目录 → -C

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

fire-flyer

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值