В начале 2019 года я писал о состоянии модульности Java . Я взял выборку широко распространенных библиотек и для каждой из них проверил, есть ли:
- Он поддерживает модульную систему т.е. он предоставляет автоматическое имя модуля в манифесте
- Это полноценный модуль т.е. он предоставляет
модуль-в
Результаты были интересными. 14 из этих 29 библиотек поддерживали модульную систему, в то время как 2 были самостоятельными модулями.
Почти 2 года спустя, когда Java 16 уже не за горами, пришло время обновить отчет. Я сохранил те же библиотеки и добавил Hazelcast и Hazelcast Jet. Я проверил последнюю версию.
Я проверил последнюю версию. | SLF4J | Струя лесного ореха | ❌ | ✓ | ❌ | p6 шпион | |
Я проверил последнюю версию. | Джексон | 2.11.8 | Первая проверка | ❌ | ✓ | 2.11.3 | |
❌ | GSon | 2.8.5 | Первая проверка | ❌ | ✓ | 2.8.6 | |
Я проверил последнюю версию. | Юнит | 5.3.2 | Первая проверка | ❌ | ✓ | 5.7.0 | |
Я проверил последнюю версию. | Мокито | 2.23.4 | Первая проверка | ❌ | ❌ | 3.5.15 | |
❌ | Блок питания | 2.0.0-RC.4 | ❌ | ❌ | ❌ | 2.0.7 | |
Я проверил последнюю версию. | Общий язык | 3.8.1 | Первая проверка | ❌ | ❌ | 3.11 | |
❌ | Математика общего пользования | 3.6.1 | ❌ | Нет нового выпуска | |||
Я проверил последнюю версию. | Гуава | 27.0.1 | Первая проверка | ❌ | ❌ | Нет нового выпуска | |
Я проверил последнюю версию. | Http-Клиент | 4.5.6 | Первая проверка | ❌ | ❌ | 4.5.13 | |
❌ | Ксерксы 2 | 2.12.0 | ❌ | Нет нового выпуска | |||
❌ | XStream | 1.4.11.1 | ❌ | ❌ | ❌ | 1.4.13 | |
❌ | дом4j | 2.1.1 | ❌ | ❌ | ❌ | 2.1.3 | |
Я проверил последнюю версию. | ДЖАКСБ | 2.3.1 | ✓ | Нет нового выпуска | |||
❌ | Apache POI | 4.0.1 | ❌ | ❌ | ❌ | 4.1.2 | |
❌ | Общий пул | 2.6.0 | Первая проверка | ❌ | ❌ | 2.9.0 | |
Я проверил последнюю версию. | Гибкая катушка | 2.1.1 | Первая проверка | ❌ | ❌ | 2.2.3 | |
Я проверил последнюю версию. | ХикариКП | 3.2.0 | ❌ | ❌ | ❌ | 3.4.5 | |
❌ | DBCP общего пользования | 2.5.0 | ❌ | ❌ | ❌ | 2.8.0 | |
❌ | Это текст | 5.5.13 | ❌ | ❌ | ❌ | 5.5.13.2 | |
❌ | щеголь | 2.3 | ❌ | ❌ | ❌ | 2.5 | |
Я проверил последнюю версию. | Коллекции Commons | 4.2 | Первая проверка | ❌ | ❌ | 4.4 | |
Я проверил последнюю версию. | Коллекции Eclipse | 9.2.0 | Первая проверка | ❌ | ❌ | 10.4.0 | |
❌ | Клад | 3.1.0 | ❌ | Нет нового выпуска | |||
❌ | Электронная почта общего пользования | 1.5 | ❌ | Нет нового выпуска | |||
Я проверил последнюю версию. | JSoup | 1.11.3 | Первая проверка | ❌ | ❌ | 1.13.1 | |
Я проверил последнюю версию. | Кодек общего пользования | 1.11 | Первая проверка | ❌ | ❌ | 1.15 | |
❌ | P6 ШпИон | 3.8.1 | p6 шпион | ❌ | ❌ | 3.9.1 | |
❌ | ПротоБуф | 3.8.1 | p6 шпион | ❌ | ❌ | 3.13.0 | |
4.0.1 | Лесной орех | Первая проверка | p6 шпион | ❌ | |||
4.2 | Струя лесного ореха | Первая проверка | p6 шпион | ❌ |
Анализ
Oracle выпустила Java 9 в сентябре 2017 года. Через три полных года после этого выпуска 10 из 31 библиотеки по-прежнему не предоставляют JAR, совместимый с модулем. Конечно, 3 из них за это время не выпустили новую версию. Это все еще 7 библиотек, которые не добавили простую строку текста в свой MANIFEST.MF
.
С хорошей стороны, Джексон, GSon и Junit перешли на модульную систему. Это не тривиальное усилие и заслуживает некоторой похвалы.
С другой стороны, SLF4J мигрировал обратно из системы модулей в автоматическое имя модуля. Это проблема. Если разработчики решат использовать модульную систему и объявят зависимости своего приложения, они не смогут обновлять библиотеки, которые следуют этой практике. Я не знаю, что с этим делать.
Я проверил новую версию v2 (все еще в альфа-версии), и в ней даже нет Имени автоматического модуля
.
Вывод
До написания этого поста я предполагал, что проникновение JPMS в экосистему было практически нулевым. Я приятно удивлен. Однако, хотя прогресс и есть, он медленный. И модульность вашего приложения, если у вас есть немодуляризованные зависимости, не является тривиальной .
Идти дальше:
- Пристальный взгляд на состояние модульности Java
- Явное присвоение имен Автоматическим Модулям Java
- Перенос загрузчика служб в модульную систему Java 9
- Перенос приложения Spring Boot на Java 9 – часть 1
- Перенос приложения Spring Boot на Java 9 – часть 2
- Контейнеризация приложений с помощью jlink
- Контейнеризация приложений с помощью jlink Mod It и т. Д. – Инструментарий для системы модулей Java
Контейнеризация приложений с помощью jlink Mod It и т. Д. – Инструментарий для системы модулей Java, Первоначально опубликованный на Контейнеризация приложений с помощью jlink Mod It и т. Д. – Инструментарий для системы модулей Java, Первоначально опубликованный на Java Geek Контейнеризация приложений с помощью jlink Mod It и т. Д. – Инструментарий для системы модулей Java, Первоначально опубликованный на Java Geek 25 октября Контейнеризация приложений с помощью jlink Mod It и т. Д. – Инструментарий для системы модулей Java, Первоначально опубликованный на Java Geek 25 октября , 2020
Оригинал: “https://dev.to/nfrankel/update-on-the-state-of-java-modularization-28nn”