BT

最新技術を追い求めるデベロッパのための情報コミュニティ

寄稿

Topics

地域を選ぶ

InfoQ ホームページ ニュース Java 9ではCORBAがデフォルトクラスパスから削除される

Java 9ではCORBAがデフォルトクラスパスから削除される

原文(投稿日:2016/06/07)へのリンク

モジュールシステムへの継続的な移行の一環として,CORBAを始めとする一部のJava EEモジュールがJava 9以降,デフォルトのクラスパスに含まれなくなる。ディストリビューションには引き続きデフォルトで同梱されるが,開発者がそれを使用する場合は,コマンドラインフラグによる明示的な指定が必要だ。モジュール対応のアプリケーションは必要なモジュールを明示的に指定しなければならないので,この変更の影響を受けるのは,Java 9をターゲットとする非モジュールアプリケーションに限られる。

The State of the Module System”で説明されているように,Java 9で追加されるモジュール機能は,開発者がすぐに使用を強いられるものではなく,後方互換性のためのオプションがいくつか提供されている。その中のひとつが,従来の非モジュールコードをJava 9でコンパイル可能にするオプションだ。これを実現するため,コンパイラは,非モジュール化コードを”無名モジュール”と呼ばれる特殊なモジュールに追加する。このモジュールにはデフォルトですべてのパッケージが含まれており,明示的な依存関係は存在しない。

残念なことに,無名モジュールが明示的な依存関係を持たないという事実が,モジュール解決においては問題となる。モジュール化されたJavaアプリケーションでは,コンパイルされたモジュールは,必要な依存関係を明示したリストを保持している。コンパイラはこの情報と,依存対象の依存関係とを合わせて,コンパイルされたモジュールが直接的ないし間接的に必要とする全モジュールの推移閉包(transitive-closure)を含むグラフを計算する。無名モジュールにはこの依存関係が示されていないため,モジュールグラフを計算する上でのルートとして使用できないのだ。

この問題を解決するため,Java 9では,コードが無名モジュールにコンパイルされる場合に,ルートモジュールとしていくつかのデフォルト値を用いる必要がある。最新の変更では,このデフォルトルートモジュールがjava.se.eeからjava.seに変更された。これによって,すべてのJava EEの拡張機能がデフォルトでは使用できなくなったが,独自のJava EEパッケージ実装を備えたアプリケーションサーバでの衝突を避けるためには有効だ。

Java 9へのマイグレーションは実施したいが,モジュールシステム対応のためにアプリケーションを書き直す予定はない,という場合は,アプリケーションのコンパイル時あるいは実行時にコマンド行引数 “-addmods <module.name>” を指定することによって,依存対象をクラスパスに改めて追加することができる。

 
 

この記事を評価

関連性
形式
 
 

この記事に星をつける

おすすめ度
スタイル

BT