jdk9-dev リストへのメールにて、Alan Bateman 氏は JDK9 の主要な開発ブランチに統合される Jigsaw モジュールシステムのスナップショットバージョンを発表した。The State of the Module System ドキュメントは進捗状況を記載しているが、Jigsaw プロジェクト開始以来、初めて注目を集めている。
歴史的に Mercurial で異なるツリーを利用し、Java 開発は異なるブランチで開発されている。Hotspot コンパイラ( VM の主要機能 )は Hotspot ツリーで開発されており、Java 開発の主要部分は jdk ツリーで開発されている。nashorn や Open JDK の corba 等も異なるツリーに存在する。結果として、それらのグループはフォレストとして関連するツリーから参照される。( Mercurial はプロジェクト作成時に軽量なブランチをもっていなかったため同プロジェクトの構造は巨大であり、内部ブランチで管理されていないために異なるリポジトリに分割されている。これが jdk8 と jkd8 が異なるフォレストになっているかの理由であり、jdk8u が 8u40 や 8u60 といった特定のタグに紐づけられたリポジトリにフォークされたものを含んでいる一方、jdk8 は開発ブランチで効率的に開発されている。幸運にもこれは単一の Git リポジトリに統合された。)
Jigsaw から発表された変更は重要で、パッケージは異なるモジュールに分割されており、それぞれ一つ以上のパッケージを伴っている。java.base
モジュールは主要な標準 Java ライブラリである java.lang
, java.util
, java.time
等を伴っている。この分割はいくつか問題があり、java.beans パッケージは AWT と Applets と密結合しているため、PropertyChangeListener
向けの java.base パッケージのリスナー登録クラス群が削除され java.desktop
モジュールに移行される。
JDK 9 クラスと Jigsaw 開発を続ける際に複雑性を排除するため、Jigsaw の実装は自身のフォレストに配置している。結果として、主要で利用可能な OpenJDK Java ビルドである Oracle と Azul's Zulu は開発者が Jigsaw を利用できる状況ではない。代替として、特別なアーリーサクセス向けのビルドを利用可能としており、Jigsaw が利用可能だが JDK 9 ブランチからの変更点の一部が含まれていない。
結果として、本メールで Oracle は Jigsaw フォレストで並行開発されている変更を JDK9 フォレストへのマージを試みるだろうことを確認している。先進的な変更( PropertyChangeListeners の削除等 )は完了しているが、automated diffs では削除が存在せず、API に対する数百の追加と変更が存在する。問題が発生することを可能な限りさけるため、主要な JDK9 フォレストへ Jigsaw 関連の変更をマージする際に JDK9 フォレストは2週間ロックされる。-- March 21's JDK9+111 ビルドがターゲット -- として一つのビルドとなることを期待されているが、Jigsaw の変更として Jigsaw チームは March 27's JDK9+112 ビルドをリクエストしている。
さらなる Jigsaw モジュールへの変更は Jigsaw フォレストで行われ、開発者は変更が発生しない主要な JDK9 フォレストに対して作業することができる。 初回のビルドは異なるモジュールに対して Java の基本ライブラリへ変更を分割されるため、将来的にモジュール間での追加漏れを回避するための module aware システムを利用してコンパイルされる。将来的には Jigsaw フォレストは JDK9 フォレストに完全に統合されて削除される。
レビューは本マージで進行中だ。InfoQ はモジュールシステムと Jigsaw が JDK9 に統合される状況を更新する予定だ。