The JavaTM Tutorial
Previous Page Lesson Contents Next Page

Урок: Использование JAR-файлов: Основы

Создание JAR-файла

Базовый формат команды для создания JAR-файла такой:
jar cf jar-файл входной-файл(ы)
Давайте рассмотрим опции и аргументы, использованные в этой команде:

Опции c и f употребляются в любом порядке, но между ними не должно быть пробелов.

Эта команда сгенерирует сжатый JAR-файл и поместит его в текущий каталог. Эта команда также сгенерирует по умолчанию файл манифеста для архива JAR.

Вы можете добавить любую из этих дополнительных опций к опциям cf в базовой команде:
ОпцияПояснение
v Вырабатывает подробный (verbose) вывод в стандартный поток сообщений об ошибках (версия 1.1) или в стандартный поток вывода (версия 1.2) во время создания JAR-файла. Подробный вывод сообщает вам имя каждого файла, когда он добавляется в JAR-файл.
0 (ноль)Показывает, что вы не хотите, чтобы JAR-файл сжимался.
M Показывает, что файл манифеста по умолчанию не должен вырабатываться.
m Используется для включения информации манифеста из существующего файла. Формат использования этой опции такой:
jar cmf существующий-манифест jar-файл входной-файл(ы)
См. дополнительную информацию об этой опции в Модификация манифеста.
-C Для изменения каталога во время выполнения команды. Только версия 1.2. Пример см. ниже.

В версии 1.1 формат JAR-файла поддерживает только имена файлов в ASCII. В версии 1.2 добавлена поддержка имен в коде UTF8.

Пример

Давайте рассмотрим пример. Демонстрационные примеры JDKTM включают в себя простой аплет TicTacToe. Этот пример содержит файл байткода класса и изображения, все они размещены в каталоге с именем TicTacToe, имеющим такую структуру:

Подкаталоги audio и images содержат звуковые файлы и GIF-изображения, используемые аплетом.

Чтобы пакетировать этот пример в один JAR-файл с именем TicTacToe.jar, вы должны выполнить такую команду из каталога TicTacToe:

jar cvf TicTacToe.jar TicTacToe.class audio images
Аргументы audio и images представляют каталоги, так что утилита Jar будет рекурсивно помещать их и их содержимое в JAR-файл. Сгенерированный JAR-файл TicTacToe.jar будет помещен в текущий каталог. Поскольку команда использует опцию v для подробного вывода, вы увидите при выполнении этой команды вывод вроде следующего:
adding: TicTacToe.class (in=3825) (out=2222) (deflated 41%)
adding: audio/ (in=0) (out=0) (stored 0%)
adding: audio/beep.au (in=4032) (out=3572) (deflated 11%)
adding: audio/ding.au (in=2566) (out=2055) (deflated 19%)
adding: audio/return.au (in=6558) (out=4401) (deflated 32%)
adding: audio/yahoo1.au (in=7834) (out=6985) (deflated 10%)
adding: audio/yahoo2.au (in=7463) (out=4607) (deflated 38%)
adding: images/ (in=0) (out=0) (stored 0%)
adding: images/cross.gif (in=157) (out=160) (deflated -1%)
adding: images/not.gif (in=158) (out=161) (deflated -1%)

Вы можете видеть из этого вывода, что JAR-файл TicTacToe.jar сжат. Утилита Jar сжимает файлы по умолчанию. Вы можете отключить сжатие при помощи опции 0 (ноль), так что команда будет выглядеть как:

jar cvf0 TicTacToe.jar TicTacToe.class audio images

Вы можете захотеть обойти сжатие, например, чтобы увеличить скорость загрузки JAR-файла браузером. Несжатые JAR-файлы могут в общем случае загружаться более быстро, чем сжатые, потому что отпадает необходимость в распаковке файла при его загрузке. Однако, за это приходится платить тем, что время загрузки через сеть может быть большим для больших, несжатых файлов.

Утилита Jar будет принимать аргументы, содержащие символ-джлкер -*. Пока в каталоге TicTacToe нет нежелательных файлов, вы можете использовать такую альтернативу команды для построения JAR-файла:

jar cvf TicTacToe.jar *

Хотя подробный вывод и не показывает это, утилита Jar автоматически добавляет к архиву JAR файл манифеста с именем META-INF/MANIFEST.MF. См. информацию о файле манифеста в разделе Понимание манифеста.

В приведенном выше примере файлы в архиве сохраняют свои относительные имена и структуру каталогов. Утилита Jar в версии 1.2 JavaTM Development Kit предоставляет опцию -C, которую вы можете использовать для создания JAR-файла, в котором относительные имена архивированных файлов не сохраняются.

Как пример, предположим, вы хотите поместить аудио-файлы и изображения, используемые примером TicTacToe в JAR-файл, и вы хотите, чтобы все файлы были на верхнем уровне, без иерархии каталогов. Вы можете проделать это применением такой команды из каталога, который является родительским для каталогов images и audio:

jar cf ImageAudio.jar -C images . -C audio .
Часть этой команды -C images велит утилите Jar перейти в каталог images, а ., следующая за -C images, велит утилите Jar архивировать все содержимое каталога. Часть команды -C audio . делает то же для каталога audio. Результирующий JAR-файл будет иметь такое содержание:
META-INF/MANIFEST.MF
cross.gif
not.gif
beep.au
ding.au
return.au
yahoo1.au
yahoo2.au
Для сравнения предположим, что вы используете команду, которая не применяет опцию -C:
jar cf ImageAudio.jar images audio
Результирующий JAR-файл будет иметь такое содержание:
META-INF/MANIFEST.MF
images/cross.gif
images/not.gif
audio/beep.au
audio/ding.au
audio/return.au
audio/yahoo1.au
audio/yahoo2.au

Previous Page Lesson Contents Next Page Start of Tutorial > Start of Trail > Start of Lesson Search
Feedback Form

Copyright 1995-2002 Sun Microsystems, Inc. All rights reserved.