Java архивы (JAR'ы)
Формат Zip также используется в файле, формата JAR (Java ARchive), который является способом сбора группы файлов в один компрессированный файл, так же как и Zip. Однако, как и все остальное в Java, JAR файлы являются кроссплатформенными, так что вам не нужно беспокоится о возможностях платформы. Вы также можете включить звуковой и графический файл наряду с файлами классов.
JAR файлы обычно полезны, когда вы имеете дело с Internet. До появления JAR файлов ваш Web броузер делал повторяющиеся запросы к Web серверу для загрузки всех файлов, из которых состоит апплет. Кроме того, каждый из этих файлов был не компрессирован. При сборе всех этих файлов для определенного апплета в единый JAR файл необходим только один запрос к серверу, а передача пройдет быстрее из-за компрессии. А каждое включение в JAR файл может иметь цифровую подпись для безопасности (обратитесь за деталями к документации по Java).
JAR файл состоит из единого файла, содержащего набор файлов, упакованных с помощью Zip, наряду с “манифестом”, который описывает их. (Вы можете создать свой собственный файл манифеста; в противном случае программа jar сделает это за вас.) Вы можете найти больше информации о файлах манифеста JAR в HTML документации для JDK.
Утилита jar, пришедшая вместе с JDK от Sun, автоматически компрессирует файлы по вашему выбору. Вы можете вызвать ее из командной строки:
jar [options] destination [manifest] inputfile(s)
Опции - это просто набор символов (не нужно ни дефисов, ни другой индикации). Пользователи Unix/Linux заметят сходство с опциями tar. Вот они:
c | Создает новый или пустой архив. | |
t | Список содержания. | |
x | Извлечь все файлы. | |
x file | Извлекает указанный файл. | |
f | Говорит: “Я дам тебе имя файла”. Если вы не используете это, jar поймет, что ввод должен идти через стандартный ввод или, если создается файл, вывод происходит через стандартный вывод. | |
m | Говорит о том, что первый аргумент будет именем файла манифеста, созданного пользователем. | |
v | Генерирует подробный вывод, описывающий то, что делает jar. | |
0 | Только хранение файлов; не компрессирует файлы (используйте для создания JAR файла, который вы можете поместить в ваш classpath). | |
M | Не выполняется автоматическое создание файла манифеста. |
Если поддиректории включаются в файлы, помещаемые в JAR файл, эти поддиректории добавляются автоматически, включая все вложенные поддиректории и т.д. Информация о пути тоже сохраняется.
Вот типичный способ вызова jar:
jar cf myJarFile.jar *.class
Это создает JAR файл, называемый myJarFile.jar, содержащий все файлы классов из текущей директории наряду с автоматически сгенерированным файлом манифеста.
jar cmf myJarFile.jar myManifestFile.mf *.class
Как и в предыдущем примере, но добавляется файл манифеста, созданный пользователем. Он называется myManifestFile.mf.
jar tf myJarFile.jar
Производится содержание файла myJarFile.jar.
jar tvf myJarFile.jar
Добавляет флаг “verbose”, чтобы получить более детальную информацию о файлах в myJarFile.jar.
jar cvf myApp.jar audio classes image
Принимая во внимание, что audio, classes и image являются поддиректориями, таким образом, все собирается в файл myApp.jar. Также включен флаг “verbose”, чтобы иметь обратную связь, пока работает программа jar.
Если вы создаете JAR файл, используя опцию 0, такой файл может быть помещен в ваш CLASSPATH:
CLASSPATH="lib1.jar;lib2.jar;"
После этого Java может искать файлы lib1.jar и lib2.jar.
Инструмент jar не является таким же полезным, как утилита zip. Например, вы не можете добавить или обновить файлы существующего JAR файла; вы можете создать JAR файл только с самого начала. Также вы не можете переместить файл в JAR файл и стереть его сразу, как только он будет перемещен. Однако JAR файл, созданный на одной платформе, может быть прочитан инструментом jar на любой другой платформе (проблема, которая иногда надоедает с утилитой zip).
Как вы увидите в Главе 13, JAR файлы также используются для упаковки JavaBeans.