Что такое формат файла JAR?
Файлы с расширением .jar представляют собой ZIP-архивы, используемые платформой Java для объединения скомпилированных файлов .class, метаданных и ресурсов - таких как изображения, текстовые файлы и данные конфигурации - в единый переносимый пакет. Формат был представлен в JDK 1.1 и остается основной единицей распространения библиотек и приложений Java.
Файл .jar может функционировать как автономный исполняемый файл, если в его файле META-INF/MANIFEST.MF указана запись Main-Class. При запуске с помощью java -jar file.jar JVM считывает этот атрибут и запускает назначенный класс, позволяя разработчикам поставлять полное приложение в виде одного файла, который работает в любой системе с установленной совместимой средой выполнения. Каждая отдельная запись внутри архива также может быть сжата независимо с использованием алгоритма DEFLATE, что уменьшает размер пакета, сохраняя при этом быстрый произвольный доступ к отдельным файлам.
Среди метаданных, которые несет .jar, файл META-INF/MANIFEST.MF является наиболее важным: он определяет, как используется пакет, перечисляет зависимости путей к классам через Class-Path и может содержать атрибуты безопасности. Цифровые подписи хранятся в виде отдельных файлов .SF и .DSA/.RSA внутри META-INF/, а не в самом манифесте. В Java 9 были представлены еще две функции: многорелизные JAR-файлы (Multi-Release JARs) размещают переопределения классов для конкретных версий в META-INF/versions/N/, а модульные JAR-файлы включают module-info.class в корне архива.
Чтобы просмотреть или извлечь содержимое файла .jar, вы можете использовать любой стандартный инструмент для распаковки ZIP и выполнять те же действия, что и с обычным архивом - переименование в .zip работает так же хорошо. Вы также можете использовать команду jar, входящую в состав JDK:
- Список содержимого:
jar -tf file.jar - Извлечение:
jar -xf file.jar - Запуск (если исполняемый):
java -jar file.jar
Связанные форматы серверных архивов включают файлы .war для веб-приложений и .ear для корпоративных приложений, оба из которых построены на той же структуре на базе ZIP.
Безопасность и защита
РИСК: MEDIUMИсполняемый JAR - это полноценная программа: при установленной Java команда «java -jar» выполняет любой содержащийся в нем код с правами вашего пользователя, поэтому неизвестный JAR может содержать вредоносное ПО (Java RAT и трояны - известное семейство). Относитесь к загруженному JAR как к любому файлу .exe: запускайте только те, которые получены из доверенного источника, и опасайтесь нежелательных вложений .jar. Простая проверка его как ZIP (7-Zip) безопасна; риск представляет именно запуск.
Детали формата
в двух словахПрограммы, открывающие файлы JAR
Технические подробности
глубокая спецификация| Формат контейнера | ZIP-архив - имеет те же магические байты `PK` (`50 4B 03 04`) со смещением 0, что и все стандартные ZIP-файлы |
| Тип MIME | `application/java-archive` |
| Обязательный внутренний файл | `META-INF/MANIFEST.MF` - должен присутствовать; управляет метаданными, путями к классам и поведением исполняемого файла |
| Триггер исполняемого JAR | Атрибут `Main-Class` в `MANIFEST.MF`; запускается с помощью `java -jar file.jar` |
| Формат байт-кода полезной нагрузки | Скомпилированные файлы `.class`, содержащие байт-код JVM - платформонезависимый, не является нативным машинным кодом |
| Сжатие каждой записи | Алгоритм DEFLATE (как в ZIP); отдельные записи также могут храниться без сжатия для более быстрого произвольного доступа |
| Цифровые подписи | Файл подписи `.SF` в паре с файлом ключа `.DSA` или `.RSA`, оба хранятся внутри `META-INF/` |
| Объявление путей к классам | Атрибут манифеста `Class-Path` перечисляет зависимые JAR-файлы через пробел для разрешения во время выполнения |
| Многорелизный JAR (MR-JAR) | Java 9+; переопределения классов для конкретных версий размещаются в `META-INF/versions/N/`, чтобы новые JVM выбирали правильный байт-код |
| Дескриптор модуля (JPMS) | Модульный JAR включает `module-info.class` в корне архива, что активирует систему модулей Java 9+ |
| Запечатывание пакета | `Sealed: true` в манифесте предотвращает внедрение классов другими JAR-файлами в тот же пакет во время выполнения |
| Uber/Fat JAR | Вариант самодостаточного развертывания, который включает в себя все зависимые JAR-файлы; требует специального загрузчика классов, такого как Spring Boot Loader |
| Выпущен | 1996-1997 (JDK 1.1) |
| Открыть стандартное | Да · без роялти |
| Спецификация | docs.oracle.com |
Конвертации JAR
Вопросы и ответы сообщества
спрошено пользователямиВопросов пока нет - станьте первым, кто спросит о файлах JAR.