Создание и использование архивов Java
Зачем нужны JAR-архивы?
Использование JAR-архивов предоставляет разработчикам аплетов (а также и автономных приложений) ряд преимуществ.
- Повышение эффективности загрузки. Вместо нескольких файлов отдельных классов загружается единственный файл JAR-архива.
- Улучшенное хранилище файлов, так как файлы классов хранятся в одном сжатом файле архива.
- Повышение защищённости. В JAR-файл можно поместить цифровую подпись, дающею конечному пользователю гарантии, что файл архива не изменился с момента её внесения. Если конечный пользователь доверяет вашей фирме, он может предоставить подписанным вами аплетам право доступа к его жестким дискам или другим важным ресурсам системы.
- Независимость от платформы. Построение JAR-архивов базируется на использовании популярной программы PKZIP сжатия файлов. Однако JAR-файлы могут создаваться и сохраняться на любой компьютерной платформе.
- Расширяемость. В спецификацию JAR-файлов внесены некоторые дополнения, обеспечивающие возможность дальнейших расширений.
Одно только повышение эффективности загрузки даёт какое преимущество! Если вы знакомы с работой протокола HTTP, то должны понимать насколько неэффективно, с его помощью, выполнять передачу нескольких небольших файлов. В каждом случае потребуется установить новое соединение TCP/IP, которое после передачи данного файла будет разорвано. Установка каждого соединения связана с дополнительной нагрузкой на сервер и сеть. При использовании коммутируемых линий связи среднее время установки TCP/IP-соединения может составлять около 0,5 c. Если для работы аплета необходимо 16 файлов, общее время затрачиваемое только на установку соединений - 8 с.
Создание JAR-архива
Для создания и модификации JAR-архивов можно использовать любую поддерживающую формат PKZIP программу. JAR-файл отличается от zip-файла наличием дополнительного текстового файла, называемого файлом описания (manifest file). Этот файл содержит сведения обо всех помещённых в данный архив файлах. В состав файла описания должны входить определённые элементы, в частности он должен включать следующие.
- Номер версии стандарта JAR. В соответствии, с которым построен данный архив. Этот номер задаётся параметром Manifest-Version и является обязательным. В SDK 1.2 значение этого параметра должно быть равно 1.0
- Минимальный номер версии утилиты JAR, которая сможет прочитать этот архив. Этот параметр необязателен и имеет название Required-Version.
- Отдельная запись для любого, помещённого в архив файла. Необязательно перечислять все помещённые в архив файлы, достаточно указать только файлы главных классов.
Фирма Sun предоставила, для создания JAR архивов, специализированный инструмент для всех поддерживаемых платформ. Рассмотрим создание JAR-архива с помощью этой утилиты под названием jar.
Предположим, что у нас имеется каталог, содержащий несколько файлов типа.class и подкаталог с именем images содержащий несколько файлов типа.gif. Пусть имя создаваемого архива будет archive.jar
Общий формат команды вызова утилиты jar: jar параметры имена_файлов
Параметр имена_файлов представляет собой список имён файлов, первым в котором всегда указывается имя самого архивного файла. Назначение остальных имён файлов зависит от ключей:
c
- создать новый архив.
m
- использовать внешний файл описания, имя которого указано вторым в списке имена_файлов.
M
- не создавать файл описания.
t
- вывести содержание указанного архивного.
x
- извлечь файлы, указанные в списке имена_файлов. Если имена не указаны, то извлечь все файлы.
f
- указывает, что имя архивного файла помещено первым в списке имена_файлов.
v
- указывает, что утилита должна сопровождать сообщениями выполнение всех действий, заданных другими параметрами.
- сохранение файлов в архиве выполняется без их сжатия.
u
- указывает, что нужно обновить указанные файлы. Или в случае команды jar umf manifest имя_архива указывает что нужно обновить информацию в файле описания.
-i
- указывает, что необходимо сгенерировать файл INDEX.LIST содержащий информацию о всех файлах архива.
И так для создания нового архива введите:
jar cf archive.jar.class images/.gif