S-JIS[2024-09-23] 変更履歴

Javaモジュール

Javaのモジュールについて。


概要

Java9でモジュールという仕組みが導入された。

モジュールは複数のパッケージをまとめたもの。
いわばライブラリー。外部に公開する単位となる。

モジュール名は「io.github.hishidama.hoge」のような名前を付ける。


モジュールはmodule-info.javaで宣言する。
module-info.javaはソースディレクトリーのルート直下に置く。

src/main/java/module-info.java:

module io.github.hishidama.hoge {
}

Eclipseの例

Eclipseの新規プロジェクトの例

Eclipseで新規Javaプロジェクトを作る場合、「Create module-info.java file」にチェックを付けるとmodule-info.javaが自動的に生成される。
このときにモジュール名を入力しないと、プロジェクト名がモジュール名になる。

プロジェクト名にはハイフン「-」を入れられるが、モジュール名には入れられない。
このため、モジュール名を入力していないときは、プロジェクト名にハイフンを含められない。


モジュール名を変更する例

module-info.javaのモジュール名を書き換えれば、モジュール名を変更することが出来る。

ただし、モジュール名変更後に既存のRun Configurationでクラスを実行すると、エラーになることがある。(Eclipseのバグだと思う)

src/main/java/module-info.java:

module io.github.hishidama.hoge2 {		// hoge2に変更
}

↓クラスを実行

Error occurred during initialization of boot layer
java.lang.module.FindException: Module io.github.hishidama.hoge not found

モジュールが見つからないというエラーだが、モジュール名が古いままだ。そりゃ見つからんだろう…。


Run Configurationの設定を開き、ダイアログの下の方にある「Show Command Line」を押すと、実行しているコマンドを確認することが出来る。

C:\Program Files\Java\jdk-23\bin\javaw.exe
-Dfile.encoding=UTF-8
-Dstdout.encoding=UTF-8
-Dstderr.encoding=UTF-8
-p "C:\workspace\module-example\bin"
-XX:+ShowCodeDetailsInExceptionMessages
-m io.github.hishidama.hoge/com.example.ModuleExample

案の定、モジュール名が古いままだ。
つまり、module-info.java上でモジュール名を変更してもRun Configurationには反映されないということのようだ。

というわけでこの場合、一旦Run Configurationの設定を消して再度実行し直せば、新しいRun Configurationでは変更後のモジュール名がちゃんと反映される。


もしくは、Run Configurationの設定を書き換えてやる。

この設定をEclipse上から変更することは出来ないようなので、設定ファイルを直接書き換える。

ワークスペース/.metadata/.plugins/org.eclipse.debug.core/.launches/実行コンフィグ名.launch:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
    <launchConfiguration type="org.eclipse.jdt.launching.localJavaApplication">
〜
    <stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE" value="com.example.ModuleExample"/>
    <stringAttribute key="org.eclipse.jdt.launching.MODULE_NAME" value="io.github.hishidama.hoge2"/>
〜
</launchConfiguration>

この場合、設定ファイルを反映させるためにEclipseを再起動する必要がある。


Java目次へ戻る / 新機能へ戻る / 技術メモへ戻る
メールの送信先:ひしだま