JDK8 でコンパイルしたアプリ(Poml)を、JDK9 で動作確認してたら Package#getImplementationVersion() メソッドの戻り値が異なってました。これからそのときのことを書いていきます。
アプリの実装
アプリの内部はこんな感じでした。
- マニフェストファイルにバージョン番号を書いている。
- そのバージョン番号を
Package#getImplementationVersion()で取得している。
マニフェストの内容は以下の通りで、
Manifest-Version: 1.0 Implementation-Version: 1.1.0 Archiver-Version: Plexus Archiver Built-By: Poml Authors Created-By: Apache Maven 3.5.2 Build-Jdk: 1.8.0_131 Main-Class: poml.Main
Implementation-Version の値を Java コードで出力する感じです。
System.out.println( Opt.class.getPackage().getImplementationVersion() );
Java8 での実行結果
Java8 のランタイムで実行すると、マニフェストのバージョンが返ってきてました。
1.1.0
Java9 での実行結果
Java9 だと null が返ってくるようになってました。
null
原因
Java9 の javadoc を読んでると Package#getImplementationVersion() は、package-info.class の情報を取ってきそうでした。もうマニフェストからは取ってくれないのかもしれません。