Метод 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.
Ответы
Ответ 1
Все JAR в пути класса (с java --class-path ...
) попадают в один и тот же так называемый неназванный модуль, независимо от того, являются "реальным модулем" или "просто JAR". Когда вы спрашиваете класс из такого JAR для своего модуля, вы получаете результат, который вы описываете.
Попробуйте поставить JAR на путь модуля (с помощью java --module-path ...
) и Class::getModule
должен вернуть то, что вы ожидаете.