1. Обзор
Мы узнали о получении имен классов из JAR-файла . Кроме того, в этом руководстве мы обсудили, как получить имена классов в файле JAR в приложении Java.
В этом руководстве мы узнаем еще один способ вывести содержимое файла JAR из командной строки.
Мы также увидим несколько инструментов с графическим интерфейсом для просмотра более подробного содержимого файла JAR — например, исходный код Java.
2. Пример файла JAR
В этом руководстве мы по-прежнему будем использовать файл stripe-0.0.1-SNAPSHOT.jar
в качестве примера, чтобы узнать, как просмотреть содержимое в файле JAR:
3. Просмотр команды jar
Мы узнали, что можем использовать команду jar ,
поставляемую с JDK, для проверки содержимого файла JAR:
$ jar tf stripe-0.0.1-SNAPSHOT.jar
META-INF/
META-INF/MANIFEST.MF
...
templates/result.html
templates/checkout.html
application.properties
com/foreach/stripe/StripeApplication.class
com/foreach/stripe/ChargeRequest.class
com/foreach/stripe/StripeService.class
com/foreach/stripe/ChargeRequest$Currency.class
Если мы хотим отфильтровать вывод, чтобы получить только нужную нам информацию, например, имена классов или файлы свойств, мы можем направить вывод в инструменты фильтрации, такие как grep
.
Команду jar
довольно удобно использовать, если в нашей системе установлен JDK.
Однако иногда нам нужно проверить содержимое файла JAR в системе без установленного JDK. В этом случае команда jar
недоступна.
Мы рассмотрим это далее.
4. Использование команды распаковать
Файлы JAR упакованы в формат файла ZIP. Другими словами, если утилита может читать ZIP-файл, мы можем использовать ее и для просмотра JAR-файла.
Команда unzip
— это широко используемая утилита для работы с ZIP-файлами из командной строки Linux.
Следовательно, мы можем использовать параметр -l
команды unzip
для отображения содержимого файла JAR без его извлечения:
$ unzip -l stripe-0.0.1-SNAPSHOT.jar
Archive: stripe-0.0.1-SNAPSHOT.jar
Length Date Time Name
--------- ---------- ----- ----
0 2020-10-16 20:53 META-INF/
...
137 2020-10-16 20:53 static/index.html
677 2020-10-16 20:53 templates/result.html
1323 2020-10-16 20:53 templates/checkout.html
37 2020-10-16 20:53 application.properties
715 2020-10-16 20:53 com/foreach/stripe/StripeApplication.class
3375 2020-10-16 20:53 com/foreach/stripe/ChargeRequest.class
2033 2020-10-16 20:53 com/foreach/stripe/StripeService.class
1146 2020-10-16 20:53 com/foreach/stripe/ChargeRequest$Currency.class
2510 2020-10-16 20:53 com/foreach/stripe/ChargeController.class
1304 2020-10-16 20:53 com/foreach/stripe/CheckoutController.class
...
--------- -------
15394 23 files
Благодаря команде unzip
мы можем просматривать содержимое файла JAR без JDK.
Вышеприведенный вывод довольно ясен. Он перечисляет файлы в файле JAR в табличном формате.
5. Изучение файлов JAR с помощью утилит GUI
Команды jar
и unzip
удобны, но они только перечисляют имена файлов в файле JAR.
Иногда нам хотелось бы узнать больше информации о файлах в файле JAR, например, изучить исходный код Java класса.
В этом разделе мы представим несколько независимых от платформы инструментов с графическим интерфейсом, которые помогут нам просматривать файлы внутри файла JAR.
5.1. Использование JD-GUI
Во-первых, давайте посмотрим на JD-GUI .
JD-GUI — это удобная графическая утилита с открытым исходным кодом для изучения исходного кода Java, декомпилированного декомпилятором Java JD-Core .
JD-GUI поставляет файл JAR. Мы можем запустить утилиту с помощью команды java
с параметром -jar
, например:
$ java -jar jd-gui-1.6.6.jar
Когда мы видим главное окно JD-GUI, мы можем либо открыть наш файл JAR, перейдя в меню « Файл -> Открыть файл…
», либо просто перетащив файл JAR в окно.
Как только мы откроем файл JAR, все классы в файле JAR будут декомпилированы.
Затем мы можем выбрать интересующие нас файлы с левой стороны, чтобы изучить их исходный код:
Как мы видим в приведенной выше демонстрации, в схеме слева также перечислены классы и члены каждого класса, такие как методы и поля, как мы обычно видим в IDE .
Очень удобно находить методы или поля, особенно когда нам нужно проверить некоторые классы с большим количеством строк кода.
Когда мы щелкаем разные классы с левой стороны, каждый класс открывается на вкладке с правой стороны.
Функция вкладки полезна, если нам нужно переключаться между несколькими классами.
5.2. Использование JAR-обозревателя
Jar Explorer — еще один инструмент с графическим интерфейсом с открытым исходным кодом для просмотра содержимого файлов JAR. Он отправляет файл jar
и стартовый скрипт « Jar Explorer.sh
». Он также поддерживает функцию перетаскивания, что упрощает открытие файла JAR.
Еще одна приятная функция, предоставляемая Jar Explorer, заключается в том, что он поддерживает три различных декомпилятора Java: JD-Core, Procyon и Fernflower .
Мы можем переключаться между декомпиляторами, когда изучаем исходный код:
Jar Explorer довольно прост в использовании. Функция переключения декомпилятора тоже хороша. Однако контур слева останавливается на уровне класса.
Кроме того, поскольку Jar Explorer не предоставляет функцию вкладок, мы можем открывать только один файл за раз.
Более того, каждый раз, когда мы выбираем класс с левой стороны, класс будет декомпилироваться текущим выбранным декомпилятором.
5.3. Использование Люйтена
Luyten — это хорошая утилита с графическим интерфейсом с открытым исходным кодом для декомпилятора Java Procyon, которая обеспечивает загрузку для различных платформ , например, в формате .exe
и формате JAR.
После того, как мы загрузили файл JAR, мы можем запустить Luyten с помощью команды java -jar
:
$ java -jar luyten-0.5.4.jar
Мы можем перетащить наш файл JAR в Luyten и изучить содержимое файла JAR:
Используя Luyten, мы не можем выбирать разные декомпиляторы Java. Но, как показано в приведенной выше демонстрации, Luyten предоставляет различные варианты декомпиляции. Кроме того, мы можем открывать несколько файлов во вкладках.
Кроме того, Luyten поддерживает удобную систему тем, и мы можем выбрать удобную тему, изучая исходные коды.
Однако Люйтен перечисляет структуру файла JAR только на уровне файла.
6. Заключение
В этой статье мы узнали, как составить список файлов в файле JAR из командной строки. Позже мы видели три утилиты с графическим интерфейсом для просмотра более подробного содержимого файла JAR.
Если мы хотим декомпилировать классы и изучить исходный код файла JAR, выбор инструмента с графическим интерфейсом может быть самым простым подходом.