Уменьшает ли модульная система платформы Java размер JAR? - PullRequest
5 голосов
/ 03 июля 2019

Здесь описано следующее преимущество Jigsaw:

В рамках проекта Jigsaw все API-интерфейсы платформы Java были разделены на отдельные модули.Преимущество разделения всех API-интерфейсов Java на модули состоит в том, что теперь вы можете указать, какие модули платформы Java требуется вашему приложению.Зная, какие модули Java Platform требуются вашему приложению, Java может упаковать ваше приложение, включая только те модули Java Platform, которые ваше приложение фактически использует.

Но я не могу понять, как это работает, потому что, поскольку язнаете, Java не помещает необходимые модули непосредственно в JAR.Он просто ищет их в модуле пути.Итак, как Java уменьшает размер JAR?

1 Ответ

5 голосов
/ 03 июля 2019

Java может упаковать ваше приложение, включая только платформу Java модули, которые фактически использует ваше приложение.

Начиная с Java 9, можно создавать пользовательских образов времени выполнения с помощью инструмента jlink .

По сути, пользовательский образ среды выполнения - это пакет, который содержит не только сторонние библиотеки, но и необходимые части JVM. Это своего рода автономный исполняемый образ, содержащий все необходимое для его запуска, без необходимости установки JRE в вашей ОС. Это хорошая функция, потому что вам не нужно беспокоиться, если у кого-то установлена ​​конкретная версия JRE для запуска образа.

Теперь, я предполагаю, что предложение, на которое вы ссылаетесь, не хочет говорить о том, что размер JAR уменьшен по сравнению с JAR до Java-9 (немодулярного). Я думаю, что автор хотел сказать, что способность упаковывать только требуемые модули JVM уменьшает его размер по сравнению с JAR, который будет содержать всю JVM.

Например, представьте, что вы пишете приложение, которое использует только некоторые базовые API-интерфейсы Java, такие как коллекции, IO или API даты и времени (содержащиеся в модуле java.base ). Поскольку вы не используете API, такие как Swing ( java.desktop module) или JDBC ( java.sql module), вам не нужно иметь их в своем пакете. Следовательно, вы можете явно указать, какие java-модули использует ваше приложение (в файле module-info.java ), и только те из них будут включены в ваше приложение. В этом случае вы бы только добавили модуль java.base в список необходимых модулей. С другой стороны, если возникнет необходимость добавить доступ к базе данных к вашему приложению с помощью JDBC, вы добавите модуль java.sql в список модулей. Как вы можете видеть, нет необходимости иметь целую JVM в комплекте с вашим приложением , так как вы можете выбрать, какие модули JVM необходимы.

...