S-JIS[2024-09-23] 変更履歴
Javaのモジュールについて。
Java9でモジュールという仕組みが導入された。
モジュールは複数のパッケージをまとめたもの。
いわばライブラリー。外部に公開する単位となる。
モジュール名は「io.github.hishidama.hoge」のような名前を付ける。
モジュールはmodule-info.javaで宣言する。
module-info.javaはソースディレクトリーのルート直下に置く。
module io.github.hishidama.hoge { }
Eclipseで新規Javaプロジェクトを作る場合、「Create
module-info.java file」にチェックを付けるとmodule-info.javaが自動的に生成される。
このときにモジュール名を入力しないと、プロジェクト名がモジュール名になる。
プロジェクト名にはハイフン「-
」を入れられるが、モジュール名には入れられない。
このため、モジュール名を入力していないときは、プロジェクト名にハイフンを含められない。
module-info.javaのモジュール名を書き換えれば、モジュール名を変更することが出来る。
ただし、モジュール名変更後に既存のRun Configurationでクラスを実行すると、エラーになることがある。(Eclipseのバグだと思う)
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上から変更することは出来ないようなので、設定ファイルを直接書き換える。
<?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を再起動する必要がある。