JAR (формат файла)
Расширение имени файла | .jar |
---|---|
Тип интернет-СМИ | |
Единый идентификатор типа (UTI) | com.sun.java-архив |
Магическое число | 50 4b 03 04 ASCII: ПК\x03\x04 |
Разработано | Netscape , Sun Microsystems , Oracle Corporation |
Тип формата | Архив файлов , сжатие данных |
Расширено с | Почтовый индекс |
Файл JAR («архив Java») — это пакета, формат файла который обычно используется для объединения множества файлов классов Java и связанных с ними метаданных и ресурсов (текста, изображений и т. д.) в один файл для распространения. [ 4 ]
Файлы JAR — это архивные файлы , специфичный для Java , которые включают файл манифеста . Они созданы в формате ZIP и обычно имеют .jar
расширение файла . [ 5 ]
Дизайн
[ редактировать ]Файл JAR позволяет средам выполнения Java эффективно развертывать все приложение, включая его классы и связанные с ними ресурсы, в одном запросе. Элементы файла JAR могут быть сжаты, что сокращает время загрузки.
Файл JAR может содержать файл манифеста, расположенный по адресу META-INF/MANIFEST.MF
. Записи в файле манифеста описывают, как использовать файл JAR. Например, запись Classpath может использоваться для указания других файлов JAR для загрузки вместе с JAR.
Добыча
[ редактировать ]Содержимое файла можно извлечь с помощью любого программного обеспечения для извлечения архивов, поддерживающего формат ZIP или jar
Утилита командной строки, входящая в состав Java Development Kit.
Безопасность
[ редактировать ]Разработчики могут цифровой подписью подписывать файлы 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. [ 6 ] [ 7 ] Он определяет данные расширения и пакета. Он содержит пары имя-значение, организованные в разделы. Если файл JAR предназначен для использования в качестве исполняемого файла, файл манифеста указывает основной класс приложения. Файл манифеста называется MANIFEST.MF
. Каталог манифеста должен быть первой записью сжатого архива.
Технические характеристики
[ редактировать ]Манифест появляется в каноническом месте. META-INF/MANIFEST.MF
. [ 8 ] В архиве может быть только один файл манифеста, и он должен находиться в этом месте.
Содержимое файла манифеста в файле JAR, созданном с помощью Java Development Kit версии 1.0 , следующее.
Manifest-Version: 1.0
Имя отделяется от значения двоеточием. Манифест по умолчанию показывает, что он соответствует версии 1.0 спецификации манифеста.
Манифест может содержать информацию о других файлах, упакованных в архив. Содержимое манифеста зависит от предполагаемого использования файла JAR. Файл манифеста по умолчанию не делает никаких предположений о том, какую информацию он должен записывать о других файлах, поэтому его единственная строка содержит данные только о нем самом. Он должен быть закодирован в UTF-8.
Заголовки манифеста специального назначения
[ редактировать ]Файлы JAR, созданные только с целью архивирования, не используют MANIFEST.MF
файл.
Большинство применений файлов JAR выходят за рамки простого архивирования и сжатия и требуют специальной информации в файле манифеста.
Функции
[ редактировать ]Манифест позволяет разработчикам определять несколько полезных функций для своих jar-файлов. Свойства указываются в парах ключ-значение.
Приложения
[ редактировать ]Если приложение содержится в файле JAR, виртуальной машине Java необходимо знать точку входа приложения. Точкой входа является любой класс с public static void main(String[] args)
метод. Эта информация предоставляется в заголовке Main-Class манифеста, который имеет общий вид:
Main-Class: com.example.MyClassName
В этом примере com.example.MyClassName.main()
выполняется при запуске приложения.
Герметизация упаковки
[ редактировать ]При желании пакет в файле JAR можно запечатать, что означает, что все классы, определенные в этом пакете, архивируются в одном файле JAR. Пакет может быть запечатан для обеспечения согласованности версий между классами программного обеспечения или в качестве меры безопасности.
Чтобы запечатать пакет, должна появиться запись «Имя», за которой следует заголовок «Запечатано», например:
Name: myCompany/myPackage/
Sealed: true
Значение заголовка Name — это относительный путь к пакету. Обратите внимание, что оно заканчивается символом «/», чтобы отличить его от имени файла. Любые заголовки, следующие за заголовком Name, без промежуточных пустых строк, применяются к файлу или пакету, указанному в заголовке Name. В приведенном выше примере, поскольку Sealed
заголовок появляется после Name: myCompany/myPackage
заголовок без промежуточных пустых строк, Sealed
заголовок применяется (только) к пакету myCompany/myPackage
.
Функция запечатанных пакетов устарела благодаря системе модулей платформы Java, представленной в Java 9, в которой модули не могут разделять пакеты. [ 9 ]
Управление версиями пакета
[ редактировать ]Несколько заголовков манифеста содержат информацию о версии. Каждому пакету может быть назначен один набор заголовков. Заголовки версий отображаются непосредственно под заголовком «Имя» пакета. В этом примере показаны все заголовки версий:
Name: java/util/
Specification-Title: "Java Utility Classes"
Specification-Version: "1.2"
Specification-Vendor: "Sun Microsystems, Inc.".
Implementation-Title: "java.util"
Implementation-Version: "build57"
Implementation-Vendor: "Sun Microsystems, Inc."
Мультирелиз
[ редактировать ]Банку можно дополнительно пометить как банку с несколькими выпусками. Использование функции нескольких выпусков позволяет разработчикам библиотек загружать различный код в зависимости от версии среды выполнения Java. [ 10 ] Это, в свою очередь, позволяет разработчикам использовать новые функции, не жертвуя совместимостью.
JAR с несколькими выпусками включается с помощью следующего объявления в манифесте:
Multi-Release: true
Зависимости
[ редактировать ]The MANIFEST.MF
Файл можно использовать для указания всех классов, которые должны быть загружены для запуска приложения. [ 11 ]
Обратите внимание, что записи Class-Path разделяются пробелами, а не разделителем системного пути:
Class-Path: . pkg1.jar path/to/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 и другие объекты, включая архивные файлы JAR, WAR и RAR Java для корпоративных приложений.
- SAR (служебный архив) аналогичен EAR. Это обеспечивает
service.xml
файл и сопутствующие файлы JAR. - APK (пакет приложений Android), вариант формата архива Java, используется для Android . приложений [ 12 ]
- AAR (архив Android) используется для распространения библиотек Android , обычно через Maven . [ 13 ]
- PAR (плановый архив) — поддерживается сервером приложений Eclipse Virgo OSGi , позволяет развертывать несколько пакетов приложений OSGi в виде одного архива и обеспечивает изоляцию от других приложений на основе PAR, развернутых на том же сервере.
- KAR (архив Karaf) – поддерживается сервером приложений Apache Karaf OSGi, позволяет развертывать многокомпонентные многофункциональные приложения OSGi.
См. также
[ редактировать ]- JAR ад
- Система модулей платформы Java
- Соглашения об открытой упаковке
- JAD (формат файла)
- ГИФАР атака
- .а статические библиотеки
Ссылки
[ редактировать ]- ^ «Расширение файла .JAR. Подробности» . Проверено 29 ноября 2012 г.
- ^ «MIME: Глоссарий Java» . Проверено 29 ноября 2012 г.
- ^ «Назначение IANA» . Проверено 12 мая 2023 г.
- ^ «API и руководства для разработчиков, связанные с JDK 6 Java Archive (JAR)» .
- ^ «Спецификация файла JAR» . Документация Java SE . Оракул. Архивировано из оригинала 11 сентября 2017 г.
- ^ «Понимание манифеста» . Java.sun.com. 21 марта 2003 г. Проверено 31 июля 2012 г.
- ^ «Спецификация файла JAR» . Скачать.oracle.com . Проверено 31 июля 2012 г.
- ^ «Спецификация файла JAR» . Скачать.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 .
- ^ «Андроид-библиотека» . Developer.android.com .