查看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文件中的內容:
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文件
jar
和unzip
命令都很方便,但是它們僅列出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文件中的所有類將被反編譯。
然後,我們可以在左側選擇感興趣的文件以檢查其源代碼:
正如我們在上面的演示中所看到的那樣,在左側的大綱中,也列出了類以及每個類的成員,例如方法和字段,就像我們在IDE中通常看到的那樣。
查找方法或字段非常方便,尤其是當我們需要檢查帶有許多代碼行的某些類時。
當我們單擊左側的不同類別時,每個類別將在右側的選項卡中打開。
如果需要在多個類之間進行切換,則製表符功能很有用。
5.2。使用Jar Explorer
Jar Explorer是另一個用於查看JAR文件內容的開源GUI工具。它附帶一個jar
文件和一個啟動腳本“ Jar Explorer.sh
”。它還支持拖放功能,使打開JAR文件非常容易。
Jar Explorer提供的另一個不錯的功能是它支持三種不同的Java反編譯器:JD-Core, Procyon和Fernflower 。
我們在檢查源代碼時可以在反編譯器之間切換:
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文件中的內容:
使用Luyten,我們不能選擇其他Java反編譯器。但是,正如上面的演示所示,Luyten提供了多種反編譯選項。另外,我們可以在標籤中打開多個文件。
除此之外,Luyten支持一個不錯的主題系統,我們可以在檢查源代碼時選擇一個舒適的主題。
但是,Luyten僅在文件級別列出JAR文件的結構。
六,結論
在本文中,我們學習瞭如何從命令行列出JAR文件中的文件。稍後,我們已經看到了三個GUI實用程序來查看JAR文件的更多詳細內容。
如果我們想反編譯類並檢查JAR文件的源代碼,則選擇GUI工具可能是最直接的方法。