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/baeldung/stripe/StripeApplication.class com/baeldung/stripe/ChargeRequest.class com/baeldung/stripe/StripeService.class com/baeldung/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/baeldung/stripe/StripeApplication.class 3375 2020-10-16 20:53 com/baeldung/stripe/ChargeRequest.class 2033 2020-10-16 20:53 com/baeldung/stripe/StripeService.class 1146 2020-10-16 20:53 com/baeldung/stripe/ChargeRequest$Currency.class 2510 2020-10-16 20:53 com/baeldung/stripe/ChargeController.class 1304 2020-10-16 20:53 com/baeldung/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 Explorer
Jar Explorer -это еще один графический инструмент с открытым исходным кодом для просмотра содержимого файлов JAR. Он отправляет файл jar и сценарий запуска ” Jar Explorer.sh “. Он также поддерживает функцию перетаскивания, что делает открытие файла JAR довольно простым.
Еще одна приятная функция, предоставляемая Jar Explorer , заключается в том, что он поддерживает три различных декомпилятора Java: JD-Core, Procyon и Fernflower .
Мы можем переключаться между декомпиляторами при изучении исходного кода:
Jar Explorer довольно прост в использовании. Функция переключения декомпилятора тоже хороша. Однако контур с левой стороны останавливается на уровне класса.
Кроме того, поскольку Jar Explorer не предоставляет функцию вкладки, мы можем одновременно открывать только один файл.
Более того, каждый раз, когда мы выбираем класс с левой стороны, класс будет декомпилирован выбранным в данный момент декомпилятором.
5.3. Использование Luyten
Luyten -это хорошая графическая утилита с открытым исходным кодом для декомпилятора Java Procyon , которая предоставляет загрузки для различных платформ , например, формат .exe и формат JAR.
После загрузки файла JAR мы можем запустить Luyten с помощью команды java-jar :
$ java -jar luyten-0.5.4.jar
Мы можем перетащить наш файл JAR в Luyten и изучить содержимое файла JAR:
Используя Luyten, мы не можем выбирать различные декомпиляторы Java. Но, как показано в приведенной выше демонстрации, Luyten предоставляет различные варианты декомпиляции. Кроме того, мы можем открывать несколько файлов во вкладках.
Кроме того, Luyten поддерживает хорошую систему тем, и мы можем выбрать удобную тему, изучая исходные коды.
Однако Luyten перечисляет структуру файла JAR только на уровне файла.
6. Заключение
В этой статье мы узнали, как перечислить файлы в файле JAR из командной строки. Позже мы увидели три утилиты GUI для просмотра более подробного содержимого файла JAR.
Если мы хотим декомпилировать классы и изучить исходный код файла JAR, выбор инструмента GUI может быть самым простым подходом.