查看JAR文件的內容

1.概述

我們已經了解瞭如何從JAR文件獲取類名。此外,在該教程中,我們討論瞭如何在Java應用程序的JAR文件中獲取類的名稱。

在本教程中,我們將學習從命令行列出JAR文件內容的另一種方法。

我們還將看到幾個GUI工具,用於查看JAR文件的更多詳細內容,例如Java源代碼。

2. JAR文件示例

在本教程中,我們仍然以[stripe-0.0.1-SNAPSHOT.jar](https://github.com/eugenp/tutorials/tree/master/stripe)文件為例,說明如何查看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

如果要過濾輸出以僅獲取所需的信息(例如,類名或屬性文件),則可以將輸出通過管道傳遞給過濾工具,例如grep

如果我們的系統安裝了JDK,則使用jar命令非常方便。

但是,有時,我們希望在未安裝JDK的系統上檢查JAR文件的內容。在這種情況下, jar命令不可用。

接下來,我們來看一下。

4.使用unzip命令

JAR文件以ZIP文件格式打包。換句話說,如果某個實用程序可以讀取一個ZIP文件,我們也可以使用它來查看一個JAR文件。

unzip命令是用於從Linux命令行處理ZIP文件的常用工具。

因此,我們可以使用unzip命令的-l選項來列出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

由於使用了unzip命令,我們可以在沒有JDK的情況下查看JAR文件的內容。

上面的輸出非常清楚。它以表格格式列出JAR文件中的文件。

5.使用GUI實用工具瀏覽JAR文件

jarunzip命令都很方便,但是它們僅列出JAR文件中的文件名。

有時,我們想了解有關JAR文件中文件的更多信息,例如,檢查類的Java源代碼。

在本節中,我們將介紹幾個獨立於平台的GUI工具,以幫助我們查看JAR文件中的文件。

5.1。使用JD-GUI

首先,讓我們看一下JD-GUI

JD-GUI是一個不錯的開源GUI實用工具,用於探索由Java反編譯器JD-Core反編譯的Java源代碼。

JD-GUI附帶了一個JAR文件。我們可以通過將java命令與-jar選項一起使用來啟動該實用程序,例如:

$ java -jar jd-gui-1.6.6.jar

當我們看到JD-GUI的主窗口時,可以通過導航菜單“ File -> Open File… ”打開我們的JAR文件,也可以將JAR文件拖放到窗口中。

打開JAR文件後,JAR文件中的所有類將被反編譯。

然後,我們可以在左側選擇感興趣的文件以檢查其源代碼:

查看JAR文件的內容

正如我們在上面的演示中所看到的那樣,在左側的大綱中,也列出了類以及每個類的成員,例如方法和字段,就像我們在IDE中通常看到的那樣

查找方法或字段非常方便,尤其是當我們需要檢查帶有許多代碼行的某些類時。

當我們單擊左側的不同類別時,每個類別將在右側的選項卡中打開。

如果需要在多個類之間進行切換,則製表符功能很有用。

5.2。使用Jar Explorer

Jar Explorer是另一個用於查看JAR文件內容的開源GUI工具。它附帶一個jar文件和一個啟動腳本“ Jar Explorer.sh ”。它還支持拖放功能,使打開JAR文件非常容易。

Jar Explorer提供的另一個不錯的功能是它支持三種不同的Java反編譯器:JD-Core, ProcyonFernflower

我們在檢查源代碼時可以在反編譯器之間切換:

查看JAR文件的內容

Jar Explorer非常易於使用。反編譯器切換功能也很好。但是,左側的大綱在班級級別停止。

另外,由於Jar Explorer不提供標籤功能,因此我們一次只能打開一個文件。

此外,每次我們在左側選擇一個類時,該類將被當前選定的反編譯器反編譯。

5.3。使用Luyten

Luyten是Java反編譯器Procyon的一個不錯的開源GUI實用工具,它為不同平台提供下載,例如.exe格式和JAR格式。

下載完JAR文件後,我們可以使用java -jar命令啟動Luyten:

$ java -jar luyten-0.5.4.jar

我們可以將JAR文件拖放到Luyten中,並瀏覽JAR文件中的內容:

查看JAR文件的內容

使用Luyten,我們不能選擇其他Java反編譯器。但是,正如上面的演示所示,Luyten提供了多種反編譯選項。另外,我們可以在標籤中打開多個文件。

除此之外,Luyten支持一個不錯的主題系統,我們可以在檢查源代碼時選擇一個舒適的主題。

但是,Luyten僅在文件級別列出JAR文件的結構。

六,結論

在本文中,我們學習瞭如何從命令行列出JAR文件中的文件。稍後,我們已經看到了三個GUI實用程序來查看JAR文件的更多詳細內容。

如果我們想反編譯類並檢查JAR文件的源代碼,則選擇GUI工具可能是最直接的方法。