Расширение имени файла | .jar |
---|---|
Тип интернет-носителя | application / java-archive |
Uniform Type Identifier (UTI) | com.sun.java-archive |
Magic number | 50 4b 03 04 ASCII: PK \ x03 \ x04 |
Разработано | Netscape, Sun Microsystems, Oracle Corporation |
Тип формата | Файловый архив, сжатие данных |
Расширенный из | ZIP |
A JAR (Java AR chive) - это пакет формат файла, обычно используемый для объединения многих файлов классов Java и связанных метаданных и ресурсов (текст, изображения и т. Д.) В один файл для распространения.
JAR-файлы - это архивные файлы, которые включают специфичный для Java файл манифеста. Они основаны на формате ZIP и обычно имеют расширение файла .jar
.
Файл JAR позволяет Среда выполнения Java для эффективного развертывания всего приложения, включая его классы и связанные с ними ресурсы, в одном запросе. Элементы файла JAR могут быть сжаты, что сокращает время загрузки.
Файл JAR может содержать файл манифеста, который находится в META-INF / MANIFEST.MF
. Записи в файле манифеста описывают, как использовать файл JAR. Например, запись Classpath может использоваться для указания других файлов JAR для загрузки вместе с JAR.
Содержимое файла JAR может быть извлечено с помощью любого стандартного программного обеспечения для распаковки или утилиты командной строки jar
: "jar -xf foo. банка
".
Разработчики могут подписывать файлы JAR цифровой подписью. В этом случае информация о подписи становится частью встроенного файла манифеста. Сам JAR не подписан, но вместо этого перечислены все файлы внутри архива вместе с его контрольной суммой; именно эти контрольные суммы подписаны. Несколько объектов могут подписывать файл JAR, изменяя сам файл JAR с каждой подписью, хотя сами подписанные файлы остаются действительными. Когда среда выполнения Java загружает подписанные файлы JAR, она может проверять подписи и отказываться загружать классы, не соответствующие подписи. Он также может поддерживать «запечатанные» пакеты, в которых Classloader разрешает загружать классы Java в один и тот же пакет только в том случае, если все они подписаны одними и теми же объектами. Это предотвращает вставку вредоносного кода в существующий пакет и, таким образом, получение доступа к классам и данным на уровне пакета.
Содержимое файлов 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. Он определяет данные, относящиеся к расширению и пакету. Он содержит пары имя-значение, организованные по разделам. Если файл JAR предназначен для использования в качестве исполняемого файла, в файле манифеста указывается основной класс приложения. Файл манифеста называется MANIFEST.MF
. Каталог манифеста должен быть первой записью сжатого архива.
Манифест отображается в каноническом месте META-INF / MANIFEST.MF
. В архиве может быть только один файл манифеста, и он должен находиться в этом месте.
Содержимое файла манифеста в файле JAR, созданном с помощью версии 1.0 пакета Java Development Kit, следующее.
Версия манифеста: 1.0
Имя отделяется от значения двоеточием. Манифест по умолчанию показывает, что он соответствует версии 1.0 спецификации манифеста.
Манифест может содержать информацию о других файлах, упакованных в архив. Содержимое манифеста зависит от предполагаемого использования файла JAR. Файл манифеста по умолчанию не делает никаких предположений о том, какую информацию он должен записывать о других файлах, поэтому его единственная строка содержит данные только о себе. Он должен быть в кодировке UTF-8.
Файлы JAR, созданные только для целей архивирования, не используют файл MANIFEST.MF
.
В большинстве случаев использование файлов JAR выходит за рамки простого архивирования и сжатия и требует специальной информации в файле манифеста.
Если приложение содержится в файле JAR, виртуальной машине Java необходимо знать точку входа приложения. Точкой входа является любой класс с методом public static void main (String args)
. Эта информация предоставляется в заголовке Main-Class, который имеет общую форму:
Main-Class: com.example.MyClassName
В этом примере com.example.MyClassName. main ()
выполняется при запуске приложения.
Необязательно, пакет в файле JAR может быть запечатан, что означает, что все классы, определенные в этом пакете, заархивированы в одном файле JAR. Пакет может быть запечатан для обеспечения согласованности версий между классами программного обеспечения или в качестве меры безопасности.
Чтобы запечатать пакет, должна появиться запись Name, за которой следует заголовок Sealed, например:
Name: myCompany / myPackage / Sealed: true
Значение заголовка Name является относительным для пакета путь. Обратите внимание, что он заканчивается знаком «/», чтобы отличить его от имени файла. Любые заголовки, следующие за заголовком Name, без промежуточных пустых строк, применяются к файлу или пакету, указанному в заголовке Name. В приведенном выше примере, поскольку заголовок Sealed
появляется после заголовка Name: myCompany / myPackage
без промежуточных пустых строк, заголовок Sealed
применяется (только) к пакет myCompany / myPackage
.
Несколько заголовков манифеста содержат информацию о версиях. Каждому пакету может быть назначен один набор заголовков. Заголовки управления версиями отображаются непосредственно под заголовком "Имя" пакета. В этом примере показаны все заголовки управления версиями:
Имя: java / util / Specification-Title: «Java Utility Classes» Версия спецификации: «1.2» Производитель спецификации: «Sun Microsystems, Inc.». Название реализации: "java.util" Версия реализации: "build57" Поставщик реализации: "Sun Microsystems, Inc."
Файл MANIFEST.MF
можно использовать для указания всех классов, которые должны быть загружены, чтобы приложение могло работать.
Обратите внимание, что Записи Class-Path разделяются пробелами, а не системным разделителем пути:
Class-Path:. pkg1.jar путь / к / pkg2.jar
Инструмент сборки Apache Ant имеет собственный пакет для чтения и записи архивов Zip и JAR, включая поддержка расширений Unix файловой системы. Пакет org.apache.tools.zip выпущен под лицензией Apache Software Foundation и предназначен для использования вне Ant.
Несколько связанных форматов файлов основаны на формате JAR: файлы