[Java] Project Jigsaw: The module system

原文はこちら。
http://mreinhold.org/blog/jigsaw-module-system

Project Jigsawは、6個のJEPを包含し、数多くのエンジニアが長年をかけて実装してきた大きなプロジェクトです。これまでにJDKのモジュラー構造を定義(JEP 200)し、モジュラー構造に従ってソースコードを再編成して(JEP 201)JDKとJREランタイムイメージを再構築してモジュールをサポートするようにしました(JEP 220)。最後の主要なコンポーネントであるモジュールシステムそのもの(JSR 376とJEP 261)をJDK 9に今週初めに統合し、early-access build 111でテストできるようになりました。
Project Jigsaw
http://openjdk.java.net/projects/jigsaw/
Project Jigsaw - JEPs
http://openjdk.java.net/projects/jigsaw/#jeps
JEP 200: The Modular JDK
http://openjdk.java.net/jeps/200
JEP 201: Modular Source Code
http://openjdk.java.net/jeps/201
JEP 220: Modular Run-Time Images
http://openjdk.java.net/jeps/220
JSR 376: Java Platform Module System
http://openjdk.java.net/projects/jigsaw/spec/
JEP 261: Module System
http://openjdk.java.net/jeps/261
JDK 9 Early Access Build Download
http://jdk9.java.net/download

Breaking changes

モジュラーランタイムイメージの導入のような以前のメジャーな変更と同様、モジュールシステムの導入によって、直接モジュールシステムを使っていないとしても何らかの影響を受ける可能性があります。
Project Jigsaw: Modular run-time images
http://mreinhold.org/blog/jigsaw-modular-images
それは、モジュールシステム、少なくとも(JEP200に記載の通り)JDKそのものを含むモジュールがコンパイル時ならびに実行時の両方で完全に機能しているからです。JDKの内部APIのほとんどは、その結果として完全に隠蔽されているので、デフォルトではJDK外のコードからアクセスできません。標準のJava SE APIだけを使用し、JDK 8で実行している既存アプリケーションの場合、JDK 9でも動作するはずですが、JDK内部のAPIを使っている場合、JDK内部のAPIを使うライブラリやフレームワークを使っているアプリケーションの場合は、実行できないでしょう。多くの場合、javacおよびjavaコマンドに対するオプション( -XaddExports )を付けることで回避できます。例えば、アプリケーションが内部クラス( sun.security.x509.X500Name )を使っている場合、以下のオプションを付けることで内部クラスにアクセスできるようになります。
-XaddExports:java.base/sun.security.x509=ALL-UNNAMED
この設定で、java.base モジュールの sun.security.x509 パッケージのすべてのメンバーが、クラスパスからクラスが定義された特別な無名モジュールにエクスポートされます。
The unnamed module (The State of the Module System)
http://openjdk.java.net/projects/jigsaw/spec/sotms/#the-unnamed-module
JDKの外部で適切に実行することができない、広く使われている内部APIとして、たとえば sun.misc.Unsafe がありますが、これは現時点ではまだアクセスすることができますが、JEP 260で説明しているように、これらは適切な標準APIに置き換えられると将来のリリースで削除される予定になっています。
JEP 260: Encapsulate Most Internal APIs
http://openjdk.java.net/jeps/260
JDK内部APIの隠蔽は、既存アプリケーションを実行する際に気付く変化でしょう。他の関連するけれどもほとんどの場合気付かれることのない変更をJEP 261のrisks-and-assumptionsで説明しています。
JEP 261: Module System
http://openjdk.java.net/jeps/261
既存アプリケーションをJDK 9 build 111もしくはそれ以後のビルドで実行した際に問題があった場合、その問題がモジュールシステム導入が原因のようだが、JEP 260、JEP 261で記載されている変更によるものではないと考えられる場合、jigsaw-devメーリングリストに知らせる(未登録の方はまず最初にサブスクライブする必要があります)か、バグレポートをJava Bug Databaseにあげてください。
jigsaw-dev -- Technical discussion about Project Jigsaw
http://mail.openjdk.java.net/mailman/listinfo/jigsaw-devJava Bug Database(bug登録)
http://bugs.java.com/

New features

モジュールシステム自体の学習を始めたいというのであれば、Devoxx BE 2015の基調講演の動画でハイレベルの概要を説明していますし、"The State of the Module System"には、JSR 376で提案したモジュールシステムのデザインがまとまっています。
Devoxx BE 2015 Keynote

The State of the Module System - AUTOMATIC EDITION
http://openjdk.java.net/projects/jigsaw/spec/sotms/
より詳細の情報は、メインプロジェクトページに記載の6個のJigsawに関連するJEPでご覧いただけますし、JavaOne 2015やDevoxx BE 2015でのセッション動画もご利用いただけます。
Project Jigsaw - JEPs
http://openjdk.java.net/projects/jigsaw/#jeps
Project Jigsaw: Talks
http://openjdk.java.net/projects/jigsaw/talks/
モジュールシステムのデザインは、フィードバックや体験に基づいて、しばらくの間まだ引き続きこのJSRで進化していきます。実装はProject Jigsawの"Jake" forestで並行して進化していき、より安定したJDK 9ビルドとは別のコードに基づいた最先端の早期アクセスビルドを引き続き提供していく予定です。
Java Platform Module System (JSR 376)
http://openjdk.java.net/projects/jigsaw/spec/
"Jake" forest
http://hg.openjdk.java.net/jigsaw/jake
Project Jigsaw: Early-Access Builds
http://openjdk.java.net/projects/jigsaw/ea
JDK™ 9 Early Access Releases
http://jdk9.java.net/download

0 件のコメント:

コメントを投稿