Одни модули могут зависить от других, например, как-то использовать их. Например, возьмем проект из прошлой темы с простейшим модулем:
В файле Hello.java определим вывод сообщения не на консоль, а через графическое окно, которое предоставляется инфраструктурой Swing:
package com.metanit.hello; import javax.swing.JOptionPane; public class Hello{ public static void main(String[] args){ //System.out.println("Hello Demo Module!"); JOptionPane.showMessageDialog(null, "Hello Demo Module!"); } }
Для вывода сообщения используется статический метод showMessageDialog()
класса JOptionPane
,
который расположен в пакете javax.swing.JOptionPane. Чтобы использовать данный класс, он импортируется в начале файла.
Однако поскольку мы используем данный класс в отдельном модуле, то просто импортировать класс или целый пакет недостаточно. Надо указать нашему модулю, чтобы он использовал модуль,
где определен данный класс.
Как узнать, в каком модуле расположен тот или иной класс? Если речь идет о встроенных классах, то для этого надо смотреть документацию, причем сразу по Java (JDK) 9+. В начале описания класса, как правило, указывается, к какому модулю он принадлежит.
Итак, документация нам сообщает, что класс JOptionPane расположен в модуле java.desktop. Теперь укажем нашему модулю, что нам надо использовать модуль java.desktop. Для этого перейдем к определению модуля в файле module-info.java и изменим его следующим образом:
module demo { requires java.desktop; }
После оператора requires указывается название модуля, от которого зависит наш модуль. Соответственно если наш модуль использует
несколько других модулей, то также с помощью оператора require
можно указать все используемые модули.
Далее скомпилируем модуль и запустим его на выполнение. После запуска нам отобразится графическое окно: