Hardmodulesjava9

Что такое модульность (Java Platform Module System, JPMS)?

1Постановка

Разберём, что от вас хотят в этом вопросе и как к нему подступиться на собеседовании.

2Решение

JPMS (Project Jigsaw, Java 9) — система модулей на уровне платформы. Модуль — набор пакетов с явными зависимостями и экспортом в module-info.java.

// module-info.java
module com.example.app {
    requires java.sql;            // зависит от модуля
    requires transitive com.lib;  // транзитивная зависимость
    exports com.example.api;      // открывает пакет
    opens com.example.entity;     // для reflection (Jackson/Hibernate)
    uses com.example.spi.Service; // сервис
    provides Service with Impl;   // реализация сервиса
}

Цели:

  • reliable configuration — явные зависимости;
  • strong encapsulation — пакет без exports недоступен снаружи (даже через reflection);
  • smaller JREjlink собирает custom runtime только с нужными модулями.

JDK разбит на ~100 модулей (java.base, java.sql, java.desktop, ...). Jar с module-info работает и без module system (automatic/unnamed module). Migration сложный — многие библиотеки используют reflection на internals.

3Как отвечать

  • Сначала уточните условия и ограничения, покажите аналитическое мышление.
  • Рассуждайте вслух — интервьюеру важен ход мысли, а не только финальный ответ.
  • Оцените сложность по времени и памяти (Big-O), если это алгоритмический вопрос.
💡

На реальном собеседовании Alffert подскажет развёрнутый ответ в реальном времени.