JEP 367: Remove the Pack200 Tools and API
Удаление инструментов и API Pack200
| Ответственный | Vicente Arturo Romero Zaldivar |
| Тип | Feature |
| Область | SE |
| Статус | Closed / Delivered |
| Выпуск | 14 |
| Компонент | tools / jar |
| Обсуждение | jdk dash dev at openjdk dot java dot net |
| Трудоёмкость | S |
| Длительность | S |
| Связан с | JEP 336: Deprecate the Pack200 Tools and API |
| Рецензенты | Alex Buckley, John Rose |
| Одобрен | John Rose |
| Создан | 2019/10/08 18:16 |
| Обновлён | 2020/02/22 02:13 |
| Задача | 8232022 |
Аннотация
Удалить инструменты pack200 и unpack200, а также API Pack200 из пакета java.util.jar. Эти инструменты и API были помечены как Deprecated for Removal (устаревший, будет удалён) в Java SE 11 с явным намерением удалить их в одном из будущих выпусков.
Мотивация
Pack200 — схема сжатия JAR-файлов, появившаяся в Java SE 5.0 благодаря JSR 200. Её цель — «снизить требования к дисковому пространству и пропускной способности сети при упаковке, передаче и доставке Java-приложений». Разработчики используют пару инструментов — pack200 и unpack200, — чтобы сжимать и распаковывать свои JAR-файлы. В пакете java.util.jar доступен API.
Есть три причины удалить Pack200:
-
Исторически медленная загрузка JDK через модемы 56k мешала распространению Java. Непрерывный рост функциональности JDK увеличивал размер загрузки и ещё больше мешал распространению. Сжатие JDK с помощью Pack200 было способом смягчить эту проблему. Однако времена изменились: скорость загрузки выросла, а в JDK 9 появились новые схемы сжатия как для среды выполнения Java (JEP 220), так и для модулей, из которых собирается среда выполнения (JMOD). Поэтому JDK 9 и более поздние версии не зависят от Pack200; JDK 8 был последним выпуском, который сжимался с помощью
pack200при сборке и распаковывался с помощьюunpack200при установке. Итак, крупный потребитель Pack200 — сам JDK — больше в нём не нуждается. -
Помимо JDK, с помощью Pack200 было удобно сжимать клиентские приложения, и особенно апплеты. Некоторые технологии развёртывания, например браузерный плагин Oracle, автоматически распаковывали JAR-файлы апплетов. Однако ситуация с клиентскими приложениями изменилась, и большинство браузеров прекратили поддержку плагинов. Поэтому крупная категория потребителей Pack200 — апплеты, работающие в браузерах, — больше не является причиной включать Pack200 в JDK.
-
Pack200 — сложная и изощрённая технология. Её формат файлов тесно связан с форматом class-файлов и форматом JAR-файлов, и оба они развивались так, как в JSR 200 не предполагалось. (Например, JEP 309 добавил в формат class-файлов новый вид записей пула констант, а JEP 238 добавил в формат JAR-файлов метаданные о версиях.) Реализация в JDK разделена между кодом на Java и нативным кодом, из-за чего её трудно сопровождать. API в
java.util.jar.Pack200мешал модуляризации платформы Java SE, что привело к удалению четырёх его методов в Java SE 9. В целом затраты на сопровождение Pack200 значительны и перевешивают пользу от его включения в Java SE и JDK.
Описание
Три типа в модуле java.base, ранее помеченные аннотацией @Deprecated(forRemoval=true), будут удалены в том Feature Release (функциональный выпуск) JDK, в который в итоге будет включён этот JEP:
java.util.jar.Pack200java.util.jar.Pack200.Packerjava.util.jar.Pack200.Unpacker
Модуль jdk.pack, содержащий инструменты pack200 и unpack200, ранее был помечен аннотацией @Deprecated(forRemoval=true) и также будет удалён в том Feature Release JDK, в который в итоге будет включён этот JEP.
Риски и допущения
Мы предполагаем, что разработчики, которые зависят от Pack200, были уведомлены о предлагаемом удалении достаточно заранее, чтобы найти альтернативные решения. Пометка Pack200 как Deprecated for Removal в JDK 11 была предложена и подтверждена в июне 2018 года, и с тех пор интереса к этой теме больше не проявлялось. (Сообщество Eclipse, крупный потребитель Pack200, провело собственные обсуждения (1, 2), но о дальнейшем продвижении не сообщалось.) Пометка API Pack200 как Deprecated for Removal была отмечена в Platform JSR для Java SE 11, а затем для Java SE 12 и Java SE 13. В рассылках Platform JSR (1, 2) не поступило ни одного комментария о предлагаемом удалении.
Мы предполагаем, что разработчики, которые используют pack200 для уменьшения JAR-файлов приложений, могут перейти на инструмент jlink или инструмент jpackage, чтобы создавать среды выполнения для конкретных приложений в оптимизированном виде. Подробнее об этих инструментах см. JEP 282 и JEP 343. Сборка JDK 14 в статусе Early Access (ранний доступ), включающая jpackage, доступна.