JAR ( J AVA AR - резанец) представляет собой пакет формат обычно используется для агрегирования многих файлов классов Java и связанный с ними метаданные и ресурсы (текст, изображения и т.д.) в один файл для распределения. [3]
Расширение имени файла | .банка |
---|---|
Тип интернет-СМИ | |
Единый идентификатор типа (UTI) | com.sun.java-архив |
Магическое число | 50 4b 03 04 ASCII: PK \ x03 \ x04 |
Разработано | Netscape , Sun Microsystems , Oracle Corporation |
Тип формата | Файловый архив , сжатие данных |
Расширен с | ZIP |
Файлы JAR - это архивные файлы, которые включают файл манифеста, специфичный для Java . Они основаны на формате ZIP и обычно имеют .jar
расширение файла . [4]
Дизайн
Файл JAR позволяет средам выполнения Java эффективно развертывать все приложение, включая его классы и связанные с ними ресурсы, в одном запросе. Элементы файла JAR могут быть сжаты, что сокращает время загрузки.
Файл JAR может содержать файл манифеста, расположенный по адресу META-INF/MANIFEST.MF
. Записи в файле манифеста описывают, как использовать файл JAR. Например, запись Classpath может использоваться для указания других файлов JAR, загружаемых вместе с JAR.
Добыча
Содержимое файла можно извлечь с помощью любого стандартного программного обеспечения для сжатия или jar
утилиты командной строки: " -xf foo.
".
Безопасность
Разработчики могут подписывать файлы JAR цифровой подписью. В этом случае информация о подписи становится частью встроенного файла манифеста. Сам JAR не подписан, вместо этого каждый файл внутри архива перечисляется вместе с его контрольной суммой; подписываются именно эти контрольные суммы. Несколько объектов могут подписывать файл JAR, изменяя сам файл JAR с каждой подписью, хотя сами подписанные файлы остаются действительными. Когда среда выполнения Java загружает подписанные файлы JAR, она может проверять подписи и отказываться загружать классы, не соответствующие подписи. Он также может поддерживать «запечатанные» пакеты, в которых загрузчик классов разрешает загружать классы Java в один и тот же пакет только в том случае, если все они подписаны одними и теми же объектами. Это предотвращает вставку вредоносного кода в существующий пакет и, таким образом, получение доступа к классам и данным на уровне пакета.
Содержимое файлов JAR может быть запутано, чтобы затруднить обратное проектирование .
Исполняемые файлы JAR
Исполняемая программа Java может быть упакована в файл JAR вместе с любыми библиотеками, которые использует программа. Исполняемые файлы JAR имеют манифест, определяющий класс точки входа,Main-Class: myPrograms.MyClass
и явный путь к классу (а аргумент -cp игнорируется). Некоторые операционные системы могут запускать их напрямую при нажатии. Типичный вызов - java -jar foo.jar
из командной строки.
Нативные пусковые установки могут быть созданы на большинстве платформ. Например, пользователи Microsoft Windows, которые предпочитают файлы Windows EXE, могут использовать такие инструменты, как JSmooth , Launch4J, WinRun4J или Nullsoft Scriptable Install System, чтобы обернуть отдельные файлы JAR в исполняемые файлы.
Манифест
Файл манифеста - это файл метаданных, содержащийся в JAR. [5] [6] Он определяет данные, относящиеся к расширению и пакету. Он содержит пары имя-значение, организованные по разделам. Если файл JAR предназначен для использования в качестве исполняемого файла, в файле манифеста указывается основной класс приложения. Имя файла манифеста MANIFEST.MF
. Каталог манифеста должен быть первой записью сжатого архива.
Характеристики
Манифест отображается в каноническом месте META-INF/MANIFEST.MF
. [7] В архиве может быть только один файл манифеста, и он должен находиться в этом месте.
Содержимое файла манифеста в файле JAR, созданном с помощью Java Development Kit версии 1.0, следующее.
Версия манифеста: 1.0
Имя отделяется от значения двоеточием. Манифест по умолчанию показывает, что он соответствует версии 1.0 спецификации манифеста.
Манифест может содержать информацию о других файлах, упакованных в архив. Содержимое манифеста зависит от предполагаемого использования файла JAR. Файл манифеста по умолчанию не делает никаких предположений о том, какую информацию он должен записывать о других файлах, поэтому его единственная строка содержит данные только о себе. Он должен быть в кодировке UTF-8.
Заголовки манифеста специального назначения
Файлы JAR, созданные только с целью архивирования, не используют MANIFEST.MF
файл.
В большинстве случаев использование файлов JAR выходит за рамки простого архивирования и сжатия и требует специальной информации в файле манифеста.
Функции
Манифест позволяет разработчикам определять несколько полезных функций для своих jar-файлов. Свойства указываются в парах "ключ-значение".
Приложения
Если приложение содержится в файле JAR, виртуальной машине Java необходимо знать точку входа приложения. Точкой входа является любой класс с public static void main(String[] args)
методом. Эта информация представлена в манифесте заголовка Main-Class, который имеет общую форму:
Главный класс: com.example.MyClassName
В этом примере com.example.MyClassName.main()
выполняется при запуске приложения.
Уплотнение пакета
При желании пакет в файле JAR может быть запечатан, что означает, что все классы, определенные в этом пакете, заархивированы в одном файле JAR. Пакет может быть запечатан для обеспечения согласованности версий между классами программного обеспечения или в качестве меры безопасности.
Чтобы запечатать пакет, должна появиться запись Name, за которой следует заголовок Sealed, например:
Имя : myCompany / myPackage / Sealed : true
Значение заголовка Name - это относительный путь к пакету. Обратите внимание, что он заканчивается знаком «/», чтобы отличить его от имени файла. Любые заголовки, следующие за заголовком Name, без промежуточных пустых строк, применяются к файлу или пакету, указанному в заголовке Name. В приведенном выше примере, поскольку Sealed
заголовок располагается после Name: myCompany/myPackage
заголовка без промежуточных пустых строк, Sealed
заголовок применяется (только) к пакету myCompany/myPackage
.
Функция запечатанных пакетов устарела системой модулей платформы Java, представленной в Java 9, в которой модули не могут разделять пакеты. [8]
Управление версиями пакетов
Несколько заголовков манифеста содержат информацию о версиях. Каждому пакету можно назначить один набор заголовков. Заголовки управления версиями отображаются непосредственно под заголовком "Имя" пакета. В этом примере показаны все заголовки управления версиями:
Имя : java / util / Спецификация-Название : "Java Utility Classes". Спецификация-Версия : "1.2" Спецификация-Производитель : "Sun Microsystems, Inc.". Название реализации : "java.util" Версия реализации : "build57" Поставщик реализации : "Sun Microsystems, Inc."
Мульти-релиз
Емкость может быть дополнительно помечена как емкость с несколькими выпусками. Использование функции нескольких выпусков позволяет разработчикам библиотек загружать различный код в зависимости от версии среды выполнения Java. [9] Это, в свою очередь, позволяет разработчикам использовать новые функции без ущерба для совместимости.
Jar с несколькими выпусками включается с помощью следующего объявления в манифесте:
Мульти-релиз : правда
Зависимости
Этот MANIFEST.MF
файл можно использовать для указания всех классов, которые должны быть загружены, чтобы приложение могло работать. [10]
Обратите внимание, что записи Class-Path разделяются пробелами, а не системным разделителем пути:
Класс-Path : . pkg1.jar путь / к / pkg2.jar
Поддержка Apache Ant Zip / JAR
Инструмент сборки Apache Ant имеет свой собственный пакет для чтения и записи архивов Zip и JAR, включая поддержку расширений файловой системы Unix . Пакет org.apache.tools.zip выпускается под лицензией Apache Software Foundation и предназначен для использования вне Ant.
Связанные форматы
Несколько связанных форматов файлов основаны на формате JAR:
- Файлы WAR (архив веб-приложений), а также архивы Java, хранят файлы XML , классы Java, страницы JavaServer и другие объекты для веб-приложений.
- Файлы RAR (архив адаптера ресурсов) (не путать с форматом файла RAR ), а также архивы Java, хранят файлы XML, классы Java и другие объекты для приложений J2EE Connector Architecture (JCA).
- Файлы EAR (корпоративный архив) представляют собой составные архивы Java, которые объединяют файлы XML, классы Java и другие объекты, включая архивные файлы Java JAR, WAR и RAR для корпоративных приложений.
- SAR (служебный архив) аналогичен EAR. Он предоставляет файл service.xml и сопутствующие файлы JAR.
- APK (пакет приложений Android), вариант формата архива Java, используется для приложений Android . [11]
- AAR (архив Android) используется для распространения библиотек Android , обычно через Maven . [12]
- PAR (архив планов) - поддерживается сервером приложений Eclipse Virgo OSGi , позволяет развертывать многосвязные приложения OSGi в виде единого архива и обеспечивает изоляцию от других приложений на основе PAR, развернутых на том же сервере.
- KAR (архив Karaf) - поддерживается сервером приложений Apache Karaf OSGi, позволяет развертывать многосвязные, многофункциональные приложения OSGi.
Смотрите также
- JAR ад
- Система модулей Java
- Соглашения об открытой упаковке
- JAD (формат файла)
- Гифар
Рекомендации
- ^ "Расширение файла .JAR Подробности" . Проверено 29 ноября 2012 года .
- ^ «MIME: глоссарий Java» . Проверено 29 ноября 2012 года .
- ^ «API-интерфейсы и руководства для разработчиков, относящиеся к JDK 6 Java Archive (JAR)» .
- ^ «Спецификация файла JAR» . Документация по Java SE . Oracle. Архивировано 11 сентября 2017 года.
- ^ «Понимание Манифеста» . Java.sun.com. 2003-03-21 . Проверено 31 июля 2012 .
- ^ «Спецификация файла JAR» . Download.oracle.com . Проверено 31 июля 2012 .
- ^ «Спецификация файла JAR» . Download.oracle.com . Проверено 31 июля 2012 .
- ^ «JEP 261: Модульная система» . Проверено 6 февраля 2021 .
- ^ «JEP 238: файлы JAR с несколькими выпусками» . Проверено 6 февраля 2021 .
- ^ спецификация сервлета sun, стр. 72 (servlet-2_4-fr-spec.pdf). См. Также технические примечания Java .
- ^ «Глоссарий» . developer.android.com .
- ^ «Библиотека Android» . developer.android.com .
Внешние ссылки
- Обзор файла JAR
- Спецификация файла JAR