Модульность

Создание модуля

Последнее обновление: 02.11.2025

С выходом JDK 9 в языке Java появилась новая возможность - модульность. Модульность позволяет разбить код на отдельные структурные единицы - модули. Фактически модуль представляет группу пакетов или ресурсов, объединенных в одно целое и к которым можно обращаться по имени модуля. Поддержка модулей реализована через подсистему Java Platform Module System (система модулей платформы Java), которая является частью языка Java и виртуальной машины.

До Java 9 было несколько уровней инкапсуляции функционала. Первый уровень представлял класс, в котором мы могли определить переменные и методы с различным уровнем доступа. Следующий уровень представлял пакет, который, в свою очередь, представлял коллекцию классов. Однако со временем этих уровней оказалось недостаточно. И модуль стал следующим уровнем инкапсуляции, который объединял несколько пакетов.

Определение модуля

Модуль состоит из группы пакетов. Также модуль включает список все пакетов, которые входят в модуль, и список всех модулей, от которых зависит данный модуль. Дополнительно (но необязательно) он может включать файлы ресурсов или файлы нативных библиотек.

Перед созданием модуля прежде всего надо определиться с его именем. В качестве имени модуля в принципе может использоваться произвольный идентификатор из алфавитно-цифровых символов и знаков подчеркивания. Обычно, как и в случае с пакетами, имена модулей следуют условности "reverse domain name" (обратного доменного имени). И в целом рекомендуется (хотя это и необязательно), чтобы название модуля соответствовало названию, c которого начинаются пакеты этого модуля. Это соглашение предотвращает конфликты имён пакетов в модулях. Любой пакет может быть размещtн только в одном модуле. Если имена модулей уникальны и начинаются с имени модуля, то имена пакетов также будут уникальными.

Определим и используем простейший модуль. Допустим, файлы с исходными кодами помещаются в папку "C:\java" или "Home/java" (либо какую-нибудь другую папку на жестком диске). Создадим в этой папке каталог, который назовем demo. Этот каталог будет представлять модуль. По соглашению, имя базового каталога совпадает с именем модуля.

В каталоге demo определим новый файл module-info.java со следующим кодом:

module demo {
}

Этот файл представляет дескриптор модуля (module descriptor). Этот файл может содержать только определение модуля.

С помощью ключевого слова module определяется модуль, который называется "demo", то есть так же, как и каталог, в котором данный файл расположен. После имени модуля с помощью фигурных скобок можно определить тело модуля, но в данном случае код модуля не содержит никаких инструкций.

Далее в каталоге demo создадим папку com. В папке com создадим папку metanit, а в папке com/metanithello.

В папке com/metanit/hello определим новый файл Hello.java:

package com.metanit.hello;
 
public class Hello{
     
    public static void main(String[] args){
        System.out.println("Hello METANIT.COM!");
    }
}

Название пакета файла - com.metanit.hello отражает структуру папок, в которых расположен файл. Сам файл определяет класс Hello, который в методе main выводит на консоль строку.

В итоге у нас получится следующая стуктура проекта:

Модули в Java

Теперь скомпилируем все это. Для этого вначале перейдем в командной строке/терминале к папке, в которой находится модуль demo.

Затем для компиляции модуля выполним следующую команду:

javac demo/module-info.java demo/com/metanit/hello/Hello.java

После компиляции модуля demo выполним программу с помощью следующей команды:

java  --module-path demo --module demo/com.metanit.hello.Hello

Параметр --module-path указывает на путь к модулю, а --module - на главный класс модуля.

При наборе команды вместо параметра --module-path можно указать его сокращение -p, а вместо параметра --module - сокращение -m.

И на консоли отобразится сообщение "Hello METANIT.COM!"

eugene@Eugene:~$ cd java
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
Hello METANIT.COM!
eugene@Eugene:/java$ 
Помощь сайту
Юмани:
410011174743222
Номер карты:
4048415020898850