JARファイルの内容の表示
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コマンドの使用
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ツールを選択するのが最も簡単な方法かもしれません。