1. 概述
我们之前已经介绍过 如何从 JAR 文件中获取类名 的方法,并且在那篇文章中也讨论了如何在 Java 应用中获取 JAR 文件中的类名。
本文将介绍另一种方式:通过命令行工具查看 JAR 文件的内容。
此外,我们还会介绍几个图形化工具,用于更详细地查看 JAR 文件的内容,例如 Java 源代码等。
2. 示例 JAR 文件
在本文中,我们将继续使用 stripe-0.0.1-SNAPSHOT.jar 作为示例来演示如何查看 JAR 文件的内容:
3. 使用 jar 命令查看
我们已经知道,JDK 自带的 jar 命令 可以用来查看 JAR 文件的内容:
$ jar tf stripe-0.0.1-SNAPSHOT.jar
META-INF/
META-INF/MANIFEST.MF
...
templates/result.html
templates/checkout.html
application.properties
com/baeldung/stripe/StripeApplication.class
com/baeldung/stripe/ChargeRequest.class
com/baeldung/stripe/StripeService.class
com/baeldung/stripe/ChargeRequest$Currency.class
如果只想查看特定类型的文件(如 .class
或 .properties
),可以将输出通过管道传递给过滤工具,例如 grep:
$ jar tf stripe-0.0.1-SNAPSHOT.jar | grep "\.class$"
✅ 优点:简单直接,JDK 自带,无需额外安装。
❌ 缺点:没有 JDK 环境时无法使用。
4. 使用 unzip 命令查看
⚠️ JAR 文件本质上是 ZIP 格式的压缩包,所以任何能处理 ZIP 文件的工具,理论上都可以用来查看 JAR 文件。
在 Linux 环境下,unzip 是一个常用的命令行工具,可以通过 -l
参数列出 ZIP 文件(包括 JAR 文件)的内容,而无需解压:
$ unzip -l stripe-0.0.1-SNAPSHOT.jar
Archive: stripe-0.0.1-SNAPSHOT.jar
Length Date Time Name
--------- ---------- ----- ----
0 2020-10-16 20:53 META-INF/
...
137 2020-10-16 20:53 static/index.html
677 2020-10-16 20:53 templates/result.html
1323 2020-10-16 20:53 templates/checkout.html
37 2020-10-16 20:53 application.properties
715 2020-10-16 20:53 com/baeldung/stripe/StripeApplication.class
3375 2020-10-16 20:53 com/baeldung/stripe/ChargeRequest.class
2033 2020-10-16 20:53 com/baeldung/stripe/StripeService.class
1146 2020-10-16 20:53 com/baeldung/stripe/ChargeRequest$Currency.class
2510 2020-10-16 20:53 com/baeldung/stripe/ChargeController.class
1304 2020-10-16 20:53 com/baeldung/stripe/CheckoutController.class
...
--------- -------
15394 23 files
✅ 优点:无需 JDK,跨平台支持好,适合临时查看。
❌ 缺点:只能看到文件名和大小,无法查看源码。
5. 使用图形化工具查看 JAR 文件
虽然命令行工具很方便,但它们只能列出文件名。如果需要查看 Java 源码、方法、字段等信息,就需要借助图形化工具了。
5.1. JD-GUI
JD-GUI 是一个非常流行的 Java 反编译图形工具,基于 JD-Core 实现。
JD-GUI 本身是一个 JAR 文件,可以通过如下方式启动:
$ java -jar jd-gui-1.6.6.jar
启动后,可以通过菜单 File -> Open File...
或者直接拖拽 JAR 文件打开。
打开后,所有类都会自动反编译,左侧是类结构树,右侧是源码:
✅ 优点:
- 支持类、方法、字段的导航
- 多标签页支持
- 反编译效果好
❌ 缺点:
- 依赖 Java 环境
- 不支持切换反编译器
5.2. Jar Explorer
Jar Explorer 是另一个图形化工具,支持拖拽操作,启动简单。
它支持三种主流反编译器:
- JD-Core
- Procyon
- Fernflower
可以在查看源码时切换反编译器:
✅ 优点:
- 支持多种反编译器
- 操作简单
❌ 缺点:
- 不支持多标签页
- 左侧导航只到类级别
- 每次切换类都会重新反编译
5.3. Luyten
Luyten 是基于 Procyon 的图形化反编译工具,支持多种平台(Windows、macOS、Linux),提供 .exe
和 .jar
两种格式。
启动方式如下:
$ java -jar luyten-0.5.4.jar
打开后,同样支持拖拽 JAR 文件,查看内容:
✅ 优点:
- 支持多标签页
- 提供多种反编译选项
- 支持主题切换
❌ 缺点:
- 不支持切换反编译器
- 文件结构只显示到文件级别
6. 小结
本文介绍了多种查看 JAR 文件内容的方式:
方法 | 是否需要 JDK | 是否支持源码查看 | 是否支持多标签页 |
---|---|---|---|
jar 命令 |
✅ 是 | ❌ 否 | ❌ 否 |
unzip 命令 |
❌ 否 | ❌ 否 | ❌ 否 |
JD-GUI | ✅ 是 | ✅ 是 | ✅ 是 |
Jar Explorer | ✅ 是 | ✅ 是 | ❌ 否 |
Luyten | ✅ 是 | ✅ 是 | ✅ 是 |
如果只是简单查看文件列表,命令行工具足够;如果需要查看源码和结构,推荐使用 JD-GUI 或 Luyten。
简单粗暴总结一句话:命令行看文件名,图形工具看源码。