Подтвердить что ты не робот

Метод getModule возвращает неназванный модуль для класса в именованном модуле

Я только начал смотреть на модульную систему Java 9, и мне было интересно, можно ли классу узнать, в каком модуле он находится.

Для этого я создал следующий модуль

module de.test {
  exports de.test.myexport;
}

и скомпилировал файл jar, который выглядит как

> jar --print-module-descriptor --file=Java9Test-1.0-SNAPSHOT.jar                                

de.test
  requires mandated java.base
  exports de.test.myexport

В пакете de.test у меня есть класс под названием Overview, где я звоню

Module module = Overview.class.getModule();

Однако возвращаемый объект модуля не имеет названия и не имеет ModuleDescriptor.

Я правильно использую getModule() здесь, или есть ли другой способ загрузить модуль класса?

Я использую JDK 9 build 120 в OS X.

4b9b3361

Ответ 1

Все JAR в пути класса (с java --class-path ...) попадают в один и тот же так называемый неназванный модуль, независимо от того, являются "реальным модулем" или "просто JAR". Когда вы спрашиваете класс из такого JAR для своего модуля, вы получаете результат, который вы описываете.

Попробуйте поставить JAR на путь модуля (с помощью java --module-path ...) и Class::getModule должен вернуть то, что вы ожидаете.