Архиватор jar

 

Для упаковки нескольких файлов в один архивный файл, со сжатием или без сжатия., в технологии Java разработан формат JAR. Имя архивного jar-файла может быть любым, но обычно оно получает расширение jar. Способ упаковки и сжатия основан на методе ZIP. Название JAR (Java ARchive) перекликается с названием известной утилиты TAR (Tape ARchive), разработанной в UNIX.

Отличие jar-файлов от zip-файлов только в том, что в первые автоматически включается каталог META-INF, содержащий несколько файлов с информацией об упакованных в архив файлах.

Архивные файлы очень удобно использовать в апплетах, поскольку весь архив загружается по сети сразу же, одним запросом. Все файлы апплета с байт-кодами, изображениями, звуковые файлы упаковываются в один или несколько архивов. Для их загрузки достаточно в теге <appiet> указать имена архивов в параметре archive, например:

<applet code = «MillAnim.class» archive = «first.jar, second.jar» 

width = «100%» height = «100%»></applet>

Основной файл MillAnim.class должен находиться в каком-либо из архивных файлов first.jar или second.jar. Остальные файлы отыскиваются в архивных файлах, а если не найдены там, то на сервере, в том же каталоге, что и HTML-файл. Впрочем, файлы апплета можно упаковать и в zip-архив, со сжатием или без сжатия.

Архивные файлы удобно использовать и в приложениях (applications). Все файлы приложения упаковываются в архив, например, appl.jar. Приложение выполняется прямо из архива, интерпретатор запускается с параметром -jar, например:

Java -jar appl.jar

Имя основного класса приложения, содержащего метод main (), указывается в файле MANIFEST.MF, речь о котором пойдет чуть ниже.

Архивные файлы удобны и просты для компактного хранения всей необходимой для работы программы информации. С файлами архива можно работать прямо из архива, не распаковывая их, с помощью классов пакета java.util.jar.

 

Создание архива

 

Jar-архивы создаются с помощью классов пакета java.util.jar или с помощью утилиты командной строки jar.

Правила применения утилиты jar очень похожи на правила применения утилиты tar. Набрав в командной строке слово jar и нажав клавишу <Enter>, вы получите краткое пояснение. В строке

jar {ctxu}[vfmOM] [jar-file] [manifest-file] [-C dir] files…

зашифрованы правила применения утилиты. Фигурные скобки показывают, что после слова jar и пробела надо написать одну из букв с, t, x или и. Эти буквы означают следующие операции:

  • с (create) — создать новый архив;
  • t (table of contents) — вывести в стандартный вывод список содержимого архива;
  • х (extract) — извлечь из архива один или несколько файлов;
  • u (update) — обновить архив, заменив или добавив один или несколько файлов.

После буквы, без пробела, можно написать одну или несколько букв, перечисленных в квадратных скобках. Они означают следующее:

  • v (verbose) — выводить сообщения о процессе работы с архивом в стандартный вывод;
  • f (file) — записанный далее параметр jar-file показывает имя архивного файла;
  • m (manifest) — записанный далее параметр manifest-file показывает имя файла описания;
  • о (нуль) — не сжимать файлы, записывая их в архив; 
  • м (manifest) — не создавать файл описания;

Параметр -i (index) предписывает создать в архиве файл INDEX.LIST. Он используется уже после формирования архивного файла.

После буквенных параметров-файлов через пробел записывается имя архивного файла jar-file, потом, через пробел, имя файла описания manifest-file, затем перечисляются имена файлов, которые надо занести в архив или извлечь из архива. Если это имена каталогов, то операция выполняется рекурсивно со всеми файлами каталога.

Перед первым именем каталога может стоять параметр -с. Конструкция -с dir означает, что на время выполнения утилиты jar текущим каталогом станет каталог dir. ,

Необязательные параметры занесены в квадратные скобки.

Итак, в конце командной строки должно быть записано хотя бы одно имя файла или каталога. Если среди параметров есть буква f, то первый из этих файлов понимается как архивный jar-файл. Если среди параметров находится буква т, то первый файл понимается как файл описания (manifest-file). Если среди параметров присутствуют обе буквы, то имя архивного файла и имя файла описания должны идти в том же порядке, что и буквы f и т.

Если параметр f и имя архивного файла отсутствуют, то архивным файлом будет служить стандартный вывод.

 

Если параметр m и имя файла описания отсутствуют, то по умолчанию файл MANIFEST.MF, лежащий в каталоге META-INF архивного файла, будет содержать только номер версии.

Сначала содержимое каталога ch3. Затем создается архив, в который включается файл Base.class и все содержимое подкаталога classes. Снова выводится содержимое каталога ch3. В нем появляется файл Base.jar. Потом выводится содержимое архива.

Как видите, в архиве создан каталог META-INF, а в нем файл MANIFEST.MF.

 

Файл описания MANIFEST.MF

 

Файл MANIFEST.MF, расположенный в каталоге META-INF архивного файла, предназначен для нескольких целей:

  • перечисления файлов из архива, снабженных цифровой подписью; 
  • перечисления компонентов JavaBeans, расположенных в архиве; 
  • указания имени основного класса для выполнения-приложения из архива; 
  • записи сведений о версии пакета.

Вся информация сначала записывается в обычном текстовом файле с любым именем, например, manif. Потом запускается утилита jar, в которой этот файл указывается как значение параметра т, например:

jar cmf manif Base.jar classes Base.class

Утилита проверяет правильность записей в файле manif и переносит их в файл MANIFEST.MF, добавляя свои записи.

Файл описания manif должен быть написан по строгим правилам, изложенным в спецификации JAR File Specification. Ее можно найти в документации Java 2 SDK, в файле docs\guide\jar\jar.html.

Например, если мы хотим выполнять приложение с главным файлом Base.class из архива Base.jar, то файл manif должен содержать как минимум две строки:

Main-Class: Base

Первая строка содержит относительный путь к главному классу, но не к файлу, т. е. без расширения class. В этой строке каждый символ имеет значение, даже пробел. Вторая строка пустая — файл обязательно должен заканчиваться пустой строкой, точнее говоря, символом перевода строки ‘\n’.

После того как создан архив Base.jar, можно выполнять приложение прямо из него:

Java -jar Base.jar

 

Файл INDEX.LIST

 

Для ускорения поиска файлов и более быстрой их загрузки можно создать файл поиска INDEX.LIST. Это делается после создания архива. Утилита jar запускается еще раз с параметром -i, например:

jar -i Base.jar

После этого в каталоге META-INF архива появляется файл INDEX.LIST.