jarファイルでjavapを使用する方法

jarファイルでjavapを使用する方法

私はDebianバスターを実行しており、基本的にopenjdkでプレイした非常に古いJavaゲームがありますが、正確なバージョンを覚えていません。だから私はjavapを使って、jarファイルがどのJavaバージョンにコンパイルされたかを確認したいと思います。

javap -v java-spiele/edna_bricht_aus/Edna.jar 
Error: class not found: java-spiele/edna_bricht_aus/Edna.jar

デフォルトのJavaバージョンは

java -version
openjdk version "11.0.13" 2021-10-19
OpenJDK Runtime Environment (build 11.0.13+8-post-Debian-1deb10u1)
OpenJDK 64-Bit Server VM (build 11.0.13+8-post-Debian-1deb10u1, mixed mode, sharing)

たぶん新しいものかもしれません。だからStretch repoにopenjdk-8をインストールして(例:Franken Debianを知っています)、もう一度やり直しました。

/usr/lib/jvm/java-1.8.0-openjdk-amd64/bin/javap -v /home/alex/java-spiele/edna_bricht_aus/Edna.jar 
Error: class not found: /home/alex/java-spiele/edna_bricht_aus/Edna.jar

ビジネスゲームから情報を入手することも可能ですか? openjdk-8を使用すると、ゲームは実行されず、競合が発生します。

ベストアンサー1

javapJAR以外のクラスが必要です。 JARでクラスを逆アセンブルするには、クラスパスにJARを追加してクラス名を指定します。たとえば、ゲームの代わりにJSTLを使用します。

javap -v -classpath jstl-1.2.jar org.apache.taglibs.standard.tlv.JstlCoreTLV

JARでクラスを表示するにはjar tf;を使用してスラッシュをドットに置き換えて、パスをパッケージに変換します。

JARのすべてのクラスがどのJavaバージョンに合わせて構築されているかを確認するには、JARからクラスを抽出してfile実行するのが最善です。

mkdir foo
cd foo
jar xf ../java-spiele/edna_bricht_aus/Edna.jar
find . -name \*.class -exec file {} +

おすすめ記事