Проект Jigsaw против Maven
От Jigsaw Project:
Упростите разработчикам создавать и поддерживать библиотеки и больших приложений для платформ Java SE и EE.
Я пытаюсь узнать, какой проект Jigsaw и до сих пор кажется, что цель Project Jigsaw где-то пересекается с тем, что мы сделали с использованием Maven (или Gradle): управление зависимостями.
- Это угроза для создания таких инструментов, как Maven?
- Или мое понимание неправильное и проект Jigsaw собирается дополнить эти инструменты сборки каким-то образом?
Ответы
Ответ 1
Очень упрощенный ответ
После Jigsaw, public
будет публичным только в пределах JAR. Чтобы увидеть класс вне JAR, он должен быть экспортирован.
Java будет принудительно выполнять модуляцию, потому что любое взаимодействие между модулями должно быть указано в файле module-info
.
Например, если вы создаете WAR, он останется почти неизменным, но все пакеты JARs в WAR должны определять информацию о модуле (или не определять его и обрабатываться как автоматически или неназванные модули).
Maven имеет две основные функции: управление зависимостями и построение:
- Управление зависимостями означает, что Maven может определять версии библиотек
и загрузить их из репозиториев.
- Создание означает, что Maven может скомпилировать код и упаковать его в артефакты.
В заключение: Maven по-прежнему будет нести ответственность за строительство, но нужно научиться компилировать и упаковывать с использованием модулей Jigsaw.
Ответ 2
Модули никоим образом не являются угрозой для создания инструментов. Модули дополняют инструменты сборки, поскольку инструменты сборки конструируют график зависимости артефактов и их версий во время сборки, а модули обеспечивают зависимости артефактов/модулей (не включая версии) во время сборки и время выполнения.
Из Состояние модульной системы:
"A module’s declaration does not include a version string, nor
constraints upon the version strings of the modules upon which it
depends. This is intentional: It is not a goal of the module system
to solve the version-selection problem, which is best left to build
tools and container applications."