Содержание
Извлечение объектов из архива
Распаковать архив ojdbc14-10.2.0.4.jar
в текущую директорию:
$ jar xf ojdbc14-10.2.0.4.jar
Ключи:
-x
— extract, распаковать;
-f
— file, файл, который необходимо распаковать;
В результате получим содержимое архива:
$ ls -1 META-INF ojdbc14-10.2.0.4.jar oracle
Извлечь только определённый файл или каталог, например — только папку oracle
из архива ojdbc14-10.2.0.4.jar
:
$ jar xf ojdbc14-10.2.0.4.jar oracle/
$ ls -1 ojdbc14-10.2.0.4.jar oracle
Извлечь только определённый файл:
$ jar xf ojdbc14-10.2.0.4.jar oracle/sql/NUMBER.class
$ ls -1 oracle/sql/ NUMBER.class
Необходимые каталоги (в данном случае oracle/sql
) будут созданы автоматически.
Создание jar-архива
Ключи:
-v
— verbose, будет выводить полную информацию о действиях;
-0
— zero, не будет сжимать файлы перед добавлением в арихв;
-f
— file, направить всё в файл;
-c
— create, создать архив;
-C
— change, сменить каталог на время выполнения операции.
Создадим простой архив oracle.jar
в который заархивируем содержимое каталога oracle
:
$ jar cf oracle.jar oracle/
$ ls -1 oracle oracle.jar
То же, но в подробном режиме:
$ jar cfv oracle.jar oracle/ [...] adding: oracle/jpub/(in = 0) (out= 0)(stored 0%) adding: oracle/jpub/runtime/(in = 0) (out= 0)(stored 0%) adding: oracle/jpub/runtime/MutableStruct.class(in = 5064) (out= 2242)(deflated 55%) [...]
Видно, что файлы сжимаются. Избежим этого, добавим -0
:
$ jar cfv0 oracle.jar oracle/ [...] adding: oracle/jpub/(in = 0) (out= 0)(stored 0%) adding: oracle/jpub/runtime/(in = 0) (out= 0)(stored 0%) adding: oracle/jpub/runtime/MutableStruct.class(in = 5064) (out= 5064)(stored 0%) [...]
Видим, что файлы добавляются в архив вместе с директориями. Что бы избежать этого, и файлы размещать в корне архива — используем опцию -C
:
$ mkdir or $ touch or/file.d $ jar cf or.jar -C or .
Проверим содержимое:
$ jar vtf or.jar | grep file.d 0 Tue Nov 26 18:45:52 EET 2013 file.d
Файл file.d
находится в корне архива, т.к. перед выполнением добавления его в архив — архиватор сменил текущую директорию на or
.
Просмотр содержимого jar-архива
-f
— file, файл архива;
-t
— table, список содержимого;
-v
— verbose, более полная инфомрация.
Пример:
$ jar tf oracle.jar | grep "jpub/runtime" oracle/jpub/runtime/ oracle/jpub/runtime/MutableStruct.class oracle/jpub/runtime/Util.class oracle/jpub/runtime/MutableArray.class
И с опцией -v
:
$ jar tfv oracle.jar | grep "jpub/runtime" 0 Sat Feb 02 11:40:08 EET 2008 oracle/jpub/runtime/ 5064 Sat Feb 02 11:40:08 EET 2008 oracle/jpub/runtime/MutableStruct.class 4997 Sat Feb 02 11:40:06 EET 2008 oracle/jpub/runtime/Util.class 12315 Sat Feb 02 11:40:06 EET 2008 oracle/jpub/runtime/MutableArray.class
Добавление объектов в jar-архив
-u
— update, обнвоить содержимое архива.
Создадим файл:
$ touch file.f
И добавим его в имеющийся архив oracle.jar
:
$ jar uf oracle.jar file.f
Проверим:
$ jar tvf oracle.jar | grep "file.f" 0 Tue Nov 26 18:40:26 EET 2013 file.f
При обновлении архива — так же можно использовать опцию -C
(change).
Дополнение
Простой способ найти файл, который находится в каком-то jar
-архиве, но вы не знаете в каком именно:
$ find . -name "*.jar" | xargs grep "NUMBER.class" Binary file ./ojdbc14-10.2.0.4.jar matches