私のjarをビルドしたjavacのバージョンは何ですか? 質問する

私のjarをビルドしたjavacのバージョンは何ですか? 質問する

jar をビルドするために使用された Java コンパイラのバージョンを確認するにはどうすればよいでしょうか? jar ファイルがあり、3 つの JDK のいずれかでビルドされた可能性があります。互換性を認定するには、どの JDK でビルドされたかを正確に把握する必要があります。コンパイラのバージョンは、クラス ファイルまたは jar のどこかに埋め込まれていますか?

ベストアンサー1

Ajarは単なるコンテナです。これは、 または のようなファイル アーカイブですtar。AzipMETA-INFjar階層内には興味深い情報が含まれている可能性がありますが、そのコンテンツ内のクラスのヴィンテージを指定する必要はありません。そのためには、そこに含まれるファイルを調べる必要があります。class

Peter Lawreyが元の質問へのコメントで述べたように、特定のファイルがどの JDK リリースでビルドされたかを必ずしも知ることはできませんが、に含まれるファイルclassのバイト コード クラス バージョンを調べることはできます。classjar

はい、これはちょっと面倒ですが、最初のステップは から 1 つ以上のクラスを抽出することですjar。例:

$ jar xf log4j-1.2.15.jar

CygwinがインストールされたLinux、Mac OS X、または Windows では、file(1)コマンドはクラスのバージョンを認識します。

$ file ./org/apache/log4j/Appender.class
./org/apache/log4j/Appender.class: compiled Java class data, version 45.3

あるいは、javap@jikes.thunderbolt が適切に指摘しているように、JDK から使用することもできます。

$ javap -v ./org/apache/log4j/Appender.class | grep major
 major version: 45

どちらも存在Windowsしない環境の場合filegrep

> javap -v ./org/apache/log4j/Appender.class | findstr major
 major version: 45

ちなみに、元の質問よりも、javap特定のファイルについてずっと多くのことがわかるだろうということには同意します。class

とにかく、別のクラスのバージョン、たとえば:

$ file ~/bin/classes/P.class
/home/dave/bin/classes/P.class: compiled Java class data, version 50.0

以下のリストには、クラス バージョンのメジャー番号と、そのクラス メジャー バージョンが導入された JDK バージョンが表示されます。

注:クラス バージョンは、必ずしもクラスのコンパイルに使用された JDK を識別するわけではありません。クラスを生成した可能性のある最も古いバージョンのみを識別します

たとえば、クラスのメジャー バージョン 52 は、Java 7 以降のどの JDK でも生成できます。

  • 45.3 = Java 1.1
  • 46 = Java 1.2
  • 47 = Java 1.3
  • 48 = Java 1.4
  • 49 = Java 5
  • 50 = Java 6
  • 51 = Java 7
  • 52 = Java 8
  • 53 = Java 9
  • 54 = Java 10
  • 55 = Java 11
  • 56 = ジャワ 12
  • 57 = ジャワ 13
  • 58 = ジャワ 14
  • 59 = ジャワ 15
  • 60 = ジャワ 16
  • 61 = ジャワ 17
  • 62 = ジャワ 18
  • 63 = ジャワ 19
  • 64 = ジャワ 20
  • 65 = ジャワ 21
  • 66 = ジャワ 22

おすすめ記事