JSR-294との統合

「JSR-294: Improved Modularity Support in the Java Programming Language(以下Modularity Support)」は、Java言語にモジュール化の機能を持たせるための仕様だ。詳細はこちらの記事を見ていただきたい。

どう考えても、この記事で説明しているJava Module Systemと無関係ではない。この二つは、Modularity Supportは「開発のためのモジュール(development module)」、Java Module Systemは「デプロイメントのため(deployment module)」の仕様と位置づけられている。

Modularity Supportでは、「スーパーパッケージ」という概念が導入される。実際には、super-package.javaというファイルにモジュール外に公開するクラス、モジュールに所属するクラスの指定などを行うわけだ。こうした情報は、JAMファイルのモジュールメタデータでも使用するものだ。そのため、スーパーパッケージに対してアノテーションを用いてモジュールメタデータの情報を付与し、JAMにパッケージングする際、モジュールメタデータを自動で生成するという方法が検討されている。

@Version("1.0") // モジュールアノテーション
superpackage com.wombat.webservice {// モジュール名

   // インポートされたモジュール
   @VersionConstraint("1.0+")
   import org.foo.xml;

   // エクスポートするクラス
   export x.y.z.ClassA;
   export x.y.z.InterfaceB;

   // モジュールメンバー
   member x.y.z.ClassA;
   ....
}

重要な点をかいつまんで説明したが、いかがだっただろうか。 Java Module Systemが実現した暁には、Javaを取り巻く環境が一変し、アプリケーションやライブラリの配布方法や実行方法も一変することだろう。筆者は、リポジトリからのオンデマンド・モジュールインストールが実現すれば、起動時間が遅くて評判が悪いアプレットの復権すら有り得るのではないかと考えている。それほどのインパクトをもったJSRなだけに、これからも目が離せない。