«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. Использование команды unzip

Файлы 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-файлов с помощью графических утилит

Обе команды 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, перейдя в меню «Файл». -\u003e Открыть файл… или просто перетащите файл 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:

Мы можем перетащить наш файл JAR в Luyten и изучить содержимое в файле JAR: ~~ ~ Используя Luyten, мы не можем выбирать разные декомпиляторы Java. Но, как показано в приведенной выше демонстрации, Luyten предоставляет различные варианты декомпиляции. Кроме того, мы можем открывать несколько файлов во вкладках.

$ java -jar luyten-0.5.4.jar 

Кроме того, Luyten поддерживает удобную систему тем, и мы можем выбрать удобную тему, изучая исходные коды.

Однако Luyten перечисляет структуру файла JAR только на уровне файла.

6. Заключение

В этой статье мы научились составлять список файлов в JAR-файле из командной строки. Позже мы видели три утилиты с графическим интерфейсом для просмотра более подробного содержимого файла JAR.

Если мы хотим декомпилировать классы и изучить исходный код файла JAR, выбор инструмента с графическим интерфейсом может быть самым простым подходом.

«

If we want to decompile the classes and examine the JAR file’s source code, picking a GUI tool may be the most straightforward approach.