查看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工具可能是最直接的方法。