原文はこちら。
https://blogs.oracle.com/java/get-ready-jdk9
Java 9は、今日のモノリスなJava SEプラットフォームから離れ、モジュラーシステムを導入します。下位互換性は主要な優先事項の1つであり、OracleエンジニアリングチームはJava 9へのスムーズな移行に取り組んできましたが、以下に示す、理解する必要がある重要な変更がいくつかあります。この情報を知っておくと、Java 9リリースへの準備にも役立ちます。
以下の重要なInternal APIがJDK 9でもアクセス可能にするよう提案されています。
jdepsコマンドを使うと、Javaクラスファイルのパッケージレベルもしくはクラスレベルの依存性がわかります。入力クラスが.classファイルへのパス名、ディレクトリ、JARファイル、もしくは全てのクラスファイルへの完全修飾クラス名にすることができます。
デフォルトで、-classpath オプションと入力ファイルで指定された全てのクラスを分析します。-jdkinternalsを使って、internal APIにフラグを立てる必要があります。詳しくは、jdepsのメインページをご覧ください。
https://blogs.oracle.com/java/get-ready-jdk9
Java 9は、今日のモノリスなJava SEプラットフォームから離れ、モジュラーシステムを導入します。下位互換性は主要な優先事項の1つであり、OracleエンジニアリングチームはJava 9へのスムーズな移行に取り組んできましたが、以下に示す、理解する必要がある重要な変更がいくつかあります。この情報を知っておくと、Java 9リリースへの準備にも役立ちます。
JDK 9一般的な互換性ポリシーによれば、サポートされているAPIを事前の通知で削除できます。JEP 277(Enhanced Deprecation)では、通知のプロセス、APIの状態と意図された取り扱い、およびアプリケーションにおける非推奨APIの静的使用分析ツールについて説明しています。
http://openjdk.java.net/projects/jdk9/
JEP 277: Enhanced DeprecationJEP 260(Encapsulate Most Internal APIs)では、ほとんどのInternal APIはデフォルトでアクセスできないものの、いくつかの重要かつ幅広く使われているInternal APIは、当該APIの機能の全てもしくはそのほとんどに対応するサポート対象の代替APIができるまではアクセスできます。
http://openjdk.java.net/jeps/277
JEP 260: Encapsulate Most Internal APIs一般的なルールとして、サポートされていないAPI(ほとんどの場合、sun.misc.Unsafeのようなsun.* API)を使うべきではありません。こうしたAPIはOracle JDKチームが利用するためのものです。Mark Reinholdが以下の動画(JVM Language Summit 2015)でsun.misc.Unsafeについて説明しています。
http://openjdk.java.net/jeps/260
以下の重要なInternal APIがJDK 9でもアクセス可能にするよう提案されています。
- sun.misc.{Signal,SignalHandler}
- sun.misc.Unsafe (このクラスのメソッドの多くの機能はJEP 193(Variable Handles)で利用可能)
- sun.reflect.Reflection::getCallerClass(int) (このメソッドの機能はJEP 259(Stack-Walking API)で標準的な形で提供される可能性がある)
- sun.reflect.ReflectionFactory.newConstructorForSerialization
JEP 260: Encapsulate Most Internal APIsプログラムでどのJDK Internal APIを使用しているかどうかを知るにはどうすればよいでしょうか。ソースコードにアクセスできる場合は、ソースコード内のパッケージ名からそれらのAPIを識別できます。場合によっては、これらのAPIの1つに依存するサードパーティライブラリを使用している可能性があるため、これは難題です。これらのAPIを特定するには、JDK 8で導入されたjdeps(Java依存性分析ツール)を使用できます。
http://openjdk.java.net/jeps/260
Java Dependency Analysis ToolJDK 9の早期アクセスリリースで使用できるJdepsの改良バージョンを使用する必要があります。Maven用のプラグインもあります。
https://wiki.openjdk.java.net/display/JDK8/Java+Dependency+Analysis+Tool
jdepsコマンドを使うと、Javaクラスファイルのパッケージレベルもしくはクラスレベルの依存性がわかります。入力クラスが.classファイルへのパス名、ディレクトリ、JARファイル、もしくは全てのクラスファイルへの完全修飾クラス名にすることができます。
デフォルトで、-classpath オプションと入力ファイルで指定された全てのクラスを分析します。-jdkinternalsを使って、internal APIにフラグを立てる必要があります。詳しくは、jdepsのメインページをご覧ください。
jdepsツールを使うと、変更すべきJDK internal APIだけでなく、利用可能であれば置換先の提示もしてくれます。JDK internal APIの置き換え先の全リストは以下のURLからご覧いただけます。
http://docs.oracle.com/javase/8/docs/technotes/tools/unix/jdeps.html
Java Dependency Analysis ToolKey links:
https://wiki.openjdk.java.net/display/JDK8/Java+Dependency+Analysis+Tool
- JEP 277: Enhanced Deprecation
http://openjdk.java.net/jeps/277 - JEP 260: Encapsulate Most Internal APIs
http://openjdk.java.net/jeps/260 - Java Dependency Analysis Tool
https://wiki.openjdk.java.net/display/JDK8/Java+Dependency+Analysis+Tool - Java 9 early access
https://jdk9.java.net/download/