[Java] Prepare for JDK 9

原文はこちら。
https://blogs.oracle.com/java/prepare-for-java-se-9

Java 9では、これは今日のモノリシックなJava SEプラットフォームから離れる、モジュラーシステムが導入されています。後方互換性は重要な優先事項の一つであり、OracleエンジニアリングチームはスムーズにJava 9へ移行できるよう取り組んできましたが、数多くの重要な変更点がありますので、理解しておく必要があります。Alan Batemanのプレゼンテーション"Prepare for JDK 9"からの情報を身につけ、さらにこのエントリの情報を知っておけばフラストレーションを感じることはなくなるでしょう。

Chapters

6 Steps to Prepare for JDK 9

  1. Upgrade tools and libraries to the newest versions that support JDK 9
    (JDK 9をサポートする最新バージョンにツールやライブラリをアップグレードする)
  2. Decide how you can migrate your Java EE functionalities in the JDK
    (JDK内のJava EE機能をどのように移行できるかを決定する)
  3. Run jdeps to check whether your or third party code use any internal APIs
    (jdepsを実行して自身のコードや3rdパーティのコードが内部APIを利用しているかどうかをチェックする)
  4. Look for “illegal reflective access” warnings, submit bugs
    (「不正なリフレクションでのアクセス」の警告を探し、バグを提出する)
  5. Audit code that parses the version string
    (バージョン文字列をパースするコードをチェックする)
  6. Read the release notes
    (リリースノートを読む)
JDK 9では、クラスパスとクラスをJDK 8と同じようにロードできます。つまり、JDK 9に移行するためにコードを書き直す必要はありません。モジュールに移行してJDK 9に移行する必要はありません。クラスパスとモジュールは共存でき、時間の経過にあわせてにコードをモジュールに移行することができます。sun.misc.Unsafeは依然としてJDK 9の一部であり、以前のリリースと同じように動作します。Java IDE(NetBeans、Eclipse、IntelliJ ...)およびMavenを最新のアップデートに更新してJDK 9をサポートするようにしてください。
JDK 9では、JDK内の6個のJava EEライブラリはデフォルトでは共有されません。これらの非推奨Java EE APIは以下のものです。
  • java.corba
  • java.transaction
  • java.activation
  • java.xml.bind
  • java.xml.ws
  • java.xml.ws.annotation
これらのAPIはJDK 9で非推奨になっており、将来のリリースで削除される予定です(デフォルトではJDK 9で無効化されています)。これらのパッケージはJava 9でコンパイルされず、エラーメッセージが出ます。ドキュメントには、これらのライブラリをJDK 9で有効化する移行オプションを提示しています。
Java Platform, Standard Edition Oracle JDK 9 Migration Guide Release 9
Modules Shared with Java EE Not Resolved by Default
https://docs.oracle.com/javase/9/migrate/toc.htm#JSMIG-GUID-F640FA9D-FB66-4D85-AD2B-D931174C09A3 
ただ、将来のリリースで削除される予定のため、これは一時的な解決策であることを認識しておく必要があります。
ほとんどの内部APIはデフォルトではアクセスできなくなりますが、一部の重要かつ広く使用されている内部APIは、サポート対象となる置き換えのAPIが出てくるまでアクセス可能の状態になっています。ほとんどの内部APIをカプセル化に関するJEP 260では、どの重要な内部APIが引き続きアクセス可能であるかを説明しています。
JEP 260: Encapsulate Most Internal APIs
http://openjdk.java.net/jeps/260 

例えば、そのようなAPIを使用する3rdパーティのライブラリに依存しているために、アプリケーションがJDK内部APIを使用していることに気づかないかもしれません。Java依存性分析ツールのjdepsを使用して、こうしたAPIを識別できます。このツールでは、利用可能な場合に置換候補をも提示します。Jdepsのメインページを確認してください。
Java Dependency Analysis Tool
Jdepshttps://wiki.openjdk.java.net/display/JDK8/Java+Dependency+Analysis+Tool
内部APIを直接参照してコードをコンパイルすると、コンパイルに失敗します。ランタイムでは、将来すべての内部APIをカプセル化することが目標です。コマンドラインオプション--illegalを使用すると、より深くデバッグしたり、将来の動作をテストするために不正なアクセスを拒否したりすることができます。これにより、今後リリースされるJavaにて削除対象のAPIによる影響を知ることができます。

Additional links to bookmark:

Related Blogs:


0 件のコメント:

コメントを投稿