Как просмотреть и извлечь содержимое JAR‑файла

Что такое JAR в одной строке
JAR (Java ARchive) — это ZIP‑совместимый архив, который обычно содержит скомпилированные классы Java, ресурсы и файл MANIFEST.MF. Простая аналогия: это папка проекта, упакованная в один файл.
Короткая справка по целям статьи
- Быстро посмотреть, какие файлы внутри JAR, не извлекая его полностью.
- Извлечь весь архив или отдельные файлы.
- Использовать альтернативы на платформах без JDK.
- Проверить MANIFEST и подписи.
Быстрые команды (на всех платформах)
- Показать список файлов в JAR:
jar tf YourJarFile.jar- Показать список с подробной информацией (verbose):
jar tvf YourJarFile.jar- Извлечь все файлы в текущую директорию:
jar xf YourJarFile.jar- Извлечь конкретные файлы (перечислить после имени архива):
jar xf YourJarFile.jar path/to/resource.txt com/example/App.classВажно: опции можно указывать в любом порядке (например, tfv), но между буквами не ставьте пробелов.
Как просмотреть содержимое без извлечения — подробно
- Откройте терминал/командную строку.
- Перейдите в папку с JAR или укажите путь к файлу.
- Выполните:
jar tf /путь/к/YourJarFile.jarРезультат — список путей внутри архива, например:
META-INF/
META-INF/MANIFEST.MF
com/example/App.class
resources/config.ymlСовет: если хотите отфильтровать по расширению, используйте grep:
jar tf YourJarFile.jar | grep "\.class$"Просмотр деталей (даты, права, размер)
jar tvf YourJarFile.jarЭта команда выводит более подробную информацию: дату, размер и уровень сжатия.
Как посмотреть только MANIFEST.MF
MANIFEST содержит метаданные архива (версию, главный класс и т. п.). Просмотреть его можно двумя способами:
- Извлечь только файл MANIFEST:
jar xf YourJarFile.jar META-INF/MANIFEST.MF
cat META-INF/MANIFEST.MF- Посмотреть без записи на диск (используя unzip):
unzip -p YourJarFile.jar META-INF/MANIFEST.MF | sed -n '1,200p'Как извлечь JAR — подробности и варианты
- Извлечь всё в текущую директорию:
jar xf YourJarFile.jarАрхив распакует структуру директорий точно так, как она внутри JAR.
- Извлечь только выбранные файлы (перечислите через пробел):
jar xf YourJarFile.jar templates/login.html templates/payment.html- Извлечь в другую директорию — два варианта:
- Перейти в целевую директорию и запустить извлечение:
mkdir -p /путь/к/target && cd /путь/к/target
jar xf ../путь/к/YourJarFile.jar- Использовать unzip, если нужно указать директорию напрямую:
unzip /путь/к/YourJarFile.jar -d /путь/к/targetПримечание: инструмент jar не имеет опции -C как tar. Для выбора целевой директории проще воспользоваться unzip или временно перейти в нужную папку.
Что делать, если jar недоступен (jar: command not found)
- Установите JDK/OpenJDK (команда jar входит в JDK). На Debian/Ubuntu: установите пакет openjdk‑development или openjdk‑11‑jdk.
- Если установка невозможна, используйте unzip, 7‑Zip, WinRAR или любой ZIP‑совместимый архиватор — JAR по сути ZIP.
Графические инструменты (GUI)
Если предпочитаете визуальный интерфейс — подойдут:
- 7‑Zip (Windows) — открывает JAR как ZIP.
- WinRAR (Windows) — тот же подход.
- The Unarchiver (macOS) или Keka (macOS) — распаковка.
- JD‑GUI — графический просмотр и декомпиляция классов Java.
Важно: декомпиляция может нарушать лицензионные ограничения проекта — проверяйте права на код.
Альтернативные подходы и когда они полезны
- unzip -l YourJarFile.jar — альтернативный способ получить список без JDK.
- jar с ключом x для извлечения конкретных файлов удобен при точечной правке ресурсов.
- JD‑GUI или CFR полезны, если нужно просмотреть логіку классов (деобфускация/декомпиляция).
Пример использования javap для просмотра сигнатур классов без декомпиляции исходников:
javap -classpath YourJarFile.jar com.example.YourClassБезопасность и приватность
- JAR может содержать исполняемый код. Не запускайте неизвестные JAR без проверки.
- Подписанные JAR включают файлы в META‑INF (.SF, .RSA). Изменение содержимого нарушит подпись.
- Для анализа вредоносных JAR выполняйте операции в изолированной среде или песочнице.
Важно: извлечение само по себе не исполняет код. Но запуск содержимого (java -jar) выполняет код в JAR.
Типичные ошибки и как их исправить
- jar: command not found — установите JDK или используйте unzip.
- Ошибка при извлечении: «no such file» — проверьте правильность пути и регистр символов (в Unix пути регистрозависимы).
- Нельзя изменить подписанный JAR и оставить подпись валидной — подпись нужно пере‑создать.
Роль‑ориентированные чеклисты
Разработчик:
- Просмотреть перечисление файлов (jar tf).
- Найти MANIFEST и проверить Main‑Class.
- Извлечь целевые ресурсы для локального теста.
Системный администратор / DevOps:
- Проверить версию Java в MANIFEST или документации.
- Убедиться, что зависимости и ресурсы на местах после распаковки.
- Выполнить сканирование на вредоносный код при загрузках из ненадёжных источников.
Аудитор безопасности:
- Проверить наличие META‑INF/.SF и .RSA (подписи).
- Оценить присутствие сторонних библиотек с известными уязвимостями.
Когда просмотр или извлечение не помогут (ограничения)
- JAR может быть зашифрован или обфусцирован — простой просмотр не даст читаемого кода.
- Подписанные JAR нельзя изменить без потери подписи (это не ошибка, а защита).
- Если JAR повреждён (коррупция ZIP), стандартные инструменты могут ошибаться; попробуйте zip‑repair утилиты.
Краткое резюме
- Для быстрого просмотра используйте jar tf; для подробного — jar tvf.
- Для извлечения используйте jar xf; если нужно указать целевую директорию — unzip с -d или временно перейдите в неё.
- GUI‑архиваторы и декомпиляторы помогают при визуальном анализе, но учитывайте лицензионные и безопасностные ограничения.
Примечание: команды и примеры подходят для Linux, macOS и Windows (в PowerShell/командной строке), если установлен JDK или доступен zip‑инструмент.
Ключевые действия: проверьте MANIFEST, используйте jar tf / jar xf, применяйте unzip/7‑Zip при отсутствии JDK.