stringtranslate.com

JAR (формат файла)

Файл 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-файлы, она может проверять подписи и отказываться загружать классы, которые не соответствуют подписи. Она также может поддерживать «запечатанные» пакеты, в которых Classloader разрешает загрузку классов Java в один и тот же пакет, только если они все подписаны одними и теми же сущностями. Это предотвращает вставку вредоносного кода в существующий пакет и, таким образом, получение доступа к классам и данным в области действия пакета.

Содержимое JAR-файлов может быть замаскировано , чтобы затруднить обратную разработку .

Исполняемые файлы JAR

Исполняемая программа Java может быть упакована в файл JAR вместе с любыми библиотеками, которые использует программа. Исполняемые файлы JAR имеют манифест, указывающий класс точки входаMain-Class: myPrograms.MyClass , и явный Class-Path (и аргумент -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, выглядит следующим образом.

Версия манифеста: 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. Пакет может быть запечатан для обеспечения согласованности версий между классами в программном обеспечении или в качестве меры безопасности.

Чтобы запечатать пакет, необходимо указать поле «Имя», а затем заголовок «Запечатано», например:

Имя : myCompany/myPackage/ Запечатано : true  

Значение заголовка Name — это относительное имя пути пакета. Обратите внимание, что оно заканчивается на '/', чтобы отличить его от имени файла. Любые заголовки, следующие за заголовком Name, без каких-либо промежуточных пустых строк, применяются к файлу или пакету, указанному в заголовке Name. В приведенном выше примере, поскольку Sealedзаголовок следует за Name: myCompany/myPackageзаголовком без промежуточных пустых строк, Sealedзаголовок применяется (только) к пакету myCompany/myPackage.

Функция запечатанных пакетов устарела из-за системы модулей платформы Java, представленной в Java 9, в которой модули не могут разделять пакеты. [9]

Версионирование пакетов

Несколько заголовков манифеста содержат информацию о версиях. Каждому пакету можно назначить один набор заголовков. Заголовки версий отображаются непосредственно под заголовком Name для пакета. В этом примере показаны все заголовки версий:

Имя : java/util/ Заголовок спецификации : "Java Utility Classes" Версия спецификации : "1.2" Поставщик спецификации : "Sun Microsystems, Inc.". Заголовок реализации : "java.util" Версия реализации : "build57" Поставщик реализации : "Sun Microsystems, Inc."       

Мульти-релиз

При желании jar-файл может быть помечен как многорелизный jar-файл. Использование функции многорелизности позволяет разработчикам библиотек загружать разный код в зависимости от версии среды выполнения Java. [10] Это, в свою очередь, позволяет разработчикам использовать новые функции, не жертвуя совместимостью.

Многорелизный jar-файл включается с помощью следующего объявления в манифесте:

Мульти-релиз : правда 

Зависимости

Файл MANIFEST.MFможно использовать для указания всех классов, которые необходимо загрузить для запуска приложения. [11]

Обратите внимание, что записи Class-Path разделяются пробелами, а не разделителем системного пути:

Путь к классу : . pkg1.jar путь/к/pkg2.jar 

Поддержка Apache Ant Zip/JAR

Инструмент сборки Apache Ant имеет собственный пакет для чтения и записи архивов Zip и JAR, включая поддержку расширений файловой системы Unix . Пакет org.apache.tools.zip выпущен под лицензией Apache Software Foundation и предназначен для использования вне Ant.

Связанные форматы

На основе формата JAR создано несколько связанных форматов файлов:

Смотрите также

Ссылки

  1. ^ "Расширение файла .JAR Details" . Получено 29 ноября 2012 г. .
  2. ^ "MIME : Java Glossary" . Получено 29 ноября 2012 г. .
  3. ^ "Назначение IANA" . Получено 12 мая 2023 г.
  4. ^ «API и руководства для разработчиков, связанные с JDK 6 Java Archive (JAR)».
  5. ^ "Спецификация файла JAR". Документация Java SE . Oracle. Архивировано из оригинала 2017-09-11.
  6. ^ "Понимание Манифеста". Java.sun.com. 2003-03-21 . Получено 2012-07-31 .
  7. ^ "Спецификация файла JAR". Download.oracle.com . Получено 2012-07-31 .
  8. ^ "Спецификация файла JAR". Download.oracle.com . Получено 2012-07-31 .
  9. ^ "JEP 261: Модульная система" . Получено 2021-02-06 .
  10. ^ "JEP 238: Файлы JAR с несколькими версиями" . Получено 06.02.2021 .
  11. ^ спецификация сервлета sun, стр. 72 (servlet-2_4-fr-spec.pdf). См. также Java Tech Notes.
  12. ^ "Глоссарий". developer.android.com .
  13. ^ "Библиотека Android". developer.android.com .

Внешние ссылки