[Java] IntelliJ で module-info.java に設定したライブラリを認識させる方法

コンパイルするためには module-info.java に書くだけでなく、IDE に読み込ませる必要があった。

症状

module-info.java で requires したライブラリが認識されず、IntelliJ でコンパイルできない。

module-info.java
module selflearn {
    requires java.net.http;
    requires mylib;
    requires gson;
}

サンプルコードは Eclipse 対応。
下記のような構成となっていた。

./
├── .checkstyle
├── .classpath
├── .git
├── .idea
│   ├── .gitignore
│   ├── .name
│   ├── codeStyles
│   ├── libraries
│   ├── misc.xml
│   ├── modules.xml
│   ├── vcs.xml
│   └── workspace.xml
├── .project
├── .settings
│   └── org.eclipse.jdt.core.prefs
├── bin
├── doc
├── lib
│   ├── gson-2.8.5.jar
│   └── mylib.jar
├── out
├── selflearn.iml
└── src
    ├── module-info.java
    └── foo/bar/buzz

Eclipse のプロジェクトファイル

  • .project
  • .classpath
  • .settings

IntelliJ のプロジェクトファイル

  • .idea/*
  • selflearn.iml

対処

  • 「プロジェクト構造 > プロジェクト設定 > ライブラリ」を開き、/lib/*.jar を読み込む。
  • IntelliJ の設定ファイル .iml に下記が加わり、認識されるようになる。
selflearn.iml
<orderEntry type="library" name="gson-2.8.5" level="project" />
<orderEntry type="library" name="mylib" level="project" />

Eclipse では .classpath に書き込まれているよう。
サンプルコードのままコンパイルできるものと思われるが、なければ似たような手順で読み込む必要がある。