Одни модули могут зависить от других, например, как-то использовать их. Например, возьмем проект из прошлой темы с простейшим модулем:
В данном случае модуль назвается "demo" и располагается в одноименной папке. В этой же папке лежит файл определения модуля - module-info.java. А весь код программы располагается в папке "com/metanit/hello" в файле "Hello.java".
В файле Hello.java определим вывод сообщения не на консоль, а через графическое окно, которое предоставляется инфраструктурой Swing:
package com.metanit.hello;
import javax.swing.JOptionPane;
public class Hello{
public static void main(String[] args){
//System.out.println("Hello METANIT.COM!");
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 можно указать все используемые модули.
Далее скомпилируем модуль и запустим его на выполнение.
eugene@Eugene:/java$ javac demo/module-info.java demo/com/metanit/hello/Hello.java eugene@Eugene:/java$ java --module-path demo --module demo/com.metanit.hello.Hello
После запуска нам отобразится графическое окно: