Java SE 7で強化されるモジュラリティについても少し進展があった。まずJARファイルによるアプリケーション配布の仕組みを一新するものとして注目されている「Java Module System」だが、Coward氏によってより詳細がコード例が紹介され、具体的な形が見えてきた。まずモジュールの定義はmoduleキーワードを用いてリスト1のように行う。これはorg.netbeans.coreというモジュールを宣言し、そのメンバとしてパッケージの異なる2つのクラスを定義した例である。

module-info.javaにはモジュールの配布単位であるJAM(Java Application Module)に対するメタデータをアノテーションを用いて記述することができる。@Versionや@ImportModuleのほかには、メインクラスを指定する@MainClassや属性を指定する@Attribute、モジュール初期化のためのクラスを指定する@ModuleInitializationClass、リソースのエクスポートのための@ExportResourceなどといったアノテーションが用意される予定だという。

リスト1 Java Module Systemによるモジュールの定義

// org/netbeans/core/Debugger.java
module org.netbeans.core;
package org.netbeans.core;
public class Debugger {
       ......
}

// org/netbeans/core/utils/ErrorTracker.java
module org.netbeans.core;
package org.netbeans.core.utils;
public class ErrorTracker {
       ......
}

// org/netbeans/core/module-info.java
@Version("7.0")
@ImportModule(name="java.se.core", version="1.7+")
module org.netbeans.core;

また、Java Module Systemにはモジュールの格納や検索を行うためのリポジトリ機構も提供される予定だが、これによってJAMリポジトリだけでなくOSGiのリポジトリもサポートされるとのことである。リポジトリは階層構造を持つが、JAMリポジトリやOSGiリポジトリは拡張リポジトリの下に配置されることになるようだ。

OSGiをバンドルする場合のリポジトリの構造

上記はアプリケーションのモジュラリティを強化するための仕様である。それに対してJava SE 7には、Java SEそのもののモジュラリティを確保するためにプロファイルの仕組みが導入される予定だ。Caward氏によれば、Java SE 7ではいくつかの公式なサブセットがJCPによって定義され、それによって特定の目的のために必要な機能だけを持ったJava SEプロファイルを構成することができるようになるという。たとえばリッチクライアントアプリケーションのためのプロファイルなどだ。また公式サブセットのほかに、非公式のオプション・パッケージを追加することもできるようになるとのことだ。

リッチクライアントプロファイルの例