Содержание
Извлечение объектов из архива
Распаковать архив 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