1. 概要

JARファイルからのクラス名の取得について学習しました。 さらに、そのチュートリアルでは、JavaアプリケーションのJARファイルでクラスの名前を取得する方法について説明しました。

このチュートリアルでは、コマンドラインからJARファイルのコンテンツを一覧表示する別の方法を学習します。

また、JARファイルのより詳細なコンテンツ(Javaソースコードなど)を表示するためのいくつかのGUIツールも表示されます。

2. JARファイルの例

このチュートリアルでは、JARファイルのコンテンツを表示する方法を説明する例として、stripe-0.0.1-SNAPSHOT.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などのフィルターツールに出力をパイプ処理できます。

jar コマンドは、システムにJDKがインストールされている場合に非常に便利です。

ただし、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ファイル内のファイル名のみを一覧表示します。

クラスのJavaソースコードを調べるなど、JARファイル内のファイルに関する詳細情報が必要な場合があります。

このセクションでは、JARファイル内のファイルを確認するのに役立つプラットフォームに依存しないGUIツールをいくつか紹介します。

5.1. JD-GUIの使用

まず、JD-GUIを見てみましょう。

JD-GUIは、JavaデコンパイラーJD-Coreによって逆コンパイルされたJavaソースコードを探索するための優れたオープンソースGUIユーティリティです。

JD-GUIはJARファイルを出荷します。 javaコマンドを-jarオプションとともに使用して、ユーティリティを起動できます。次に例を示します。

$ java -jar jd-gui-1.6.6.jar

JD-GUIのメインウィンドウが表示されたら、メニュー「ファイル->ファイルを開く…」に移動してJARファイルを開くか、ウィンドウにJARファイルをドラッグアンドドロップします。

JARファイルを開くと、JARファイル内のすべてのクラスが逆コンパイルされます。

次に、左側で関心のあるファイルを選択して、それらのソースコードを調べることができます。

上記のデモでわかるように、左側のアウトラインには、IDE で通常見られるように、クラスと、メソッドやフィールドなどの各クラスのメンバーもリストされています。

特に、コードの行数が多いクラスをチェックする必要がある場合は、メソッドまたはフィールドを見つけるのに非常に便利です。

左側のさまざまなクラスをクリックすると、右側のタブで各クラスが開きます。

タブ機能は、複数のクラスを切り替える必要がある場合に役立ちます。

5.2. JarExplorerの使用

JAR Explorer は、JARファイルの内容を表示するためのもう1つのオープンソースGUIツールです。 jarファイルと開始スクリプト「JarExplorer.sh」が同梱されています。 また、ドラッグアンドドロップ機能をサポートしているため、JARファイルを非常に簡単に開くことができます。

Jar Explorerが提供するもう1つの優れた機能は、が3つの異なるJavaデコンパイラー(JD-Core、Procyon、およびFernflower )をサポートすることです。

ソースコードを調べるときに、逆コンパイラを切り替えることができます。

JarExplorerは非常に使いやすいです。 逆コンパイラの切り替え機能も優れています。 ただし、左側のアウトラインはクラスレベルで停止します。

また、Jar Explorerにはタブ機能がないため、一度に開くことができるファイルは1つだけです。

さらに、左側でクラスを選択するたびに、そのクラスは現在選択されている逆コンパイラーによって逆コンパイルされます。

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ファイルの構造をファイルレベルでのみリストします。

6. 結論

この記事では、コマンドラインからJARファイル内のファイルを一覧表示する方法を学習しました。 後で、JARファイルのより詳細な内容を表示するための3つのGUIユーティリティを見てきました。

クラスを逆コンパイルしてJARファイルのソースコードを調べたい場合は、GUIツールを選択するのが最も簡単な方法かもしれません。