Просмотр содержимого файла .jar

226

Какой самый простой способ просмотреть классы, методы, свойства и т. Д. Внутри файла JAR? Я ищу что-то эквивалентное очень полезному Lutz Roeder .NET Reflector - для Java

Дани
источник
12
Почему ты не принимаешь ответ?
Санхьюн Ли
4
@HughLee Парень, который спросил это, спросил 8 лет назад . Вот почему должно быть автоматическое принятие после того, как ответ достигнет 100 голосов IMO
Колоб Каньон
@KolobCanyon правда, но они с самым высоким рейтингом ответ был отправлен в тот же день, как этот был задан
Пранав А.
1
Ответ приходит от: https://superuser.com/a/808938/1045397 Вы можете сделать это с помощью vim vim file_name.jar
byte mamba

Ответы:

280

Используя JDK, приведу jar -tfсписок файлов в банке. javapдаст вам больше деталей из конкретного файла класса.

Том Хотин - Tackline
источник
3
@salvob Вам не нужен дефис, так как он требуется после того, tarкак параметры являются обязательными.
Том Хотин - tackline
2
К вашему сведению, вам может потребоваться добавить C:\Program Files\Java\jdk<version>\binв вашу системную или пользовательскую переменную среды PATH, прежде чем вы сможете использовать jarв качестве системной команды. (Где <version> - ваш номер версии сборки jdk. Проверьте это C:\Program Files\Java)
Tezra
1
Пример javap: javap -classpath test.jar com.yourpackage.HelloWorld
mPrinC
чтобы увидеть содержимое не классовых файлов (например, манифеста), вы хотели бы сделать что-то вроде этого: tar -xOzf test.jarjar tf test.jar | grep MANIFEST
mPrinC
55

Я обычно открываю их с помощью 7-Zip ... Это позволяет хотя бы видеть пакеты, классы и ресурсы.
Если мне нужно увидеть методы или поля, я бы использовал Jad, но, конечно, лучше положиться на (хороший) JavaDoc ...

Теперь, где-то в SO было упомянуто несколько плагинов Eclipse, чтобы найти, в каком jar-файле находится класс, возможно, они могут сделать больше (т.е. то, что вы запросили).

[РЕДАКТИРОВАТЬ] Ссылка на SO поток. Не то, что спрашивается, а как-то связано, поэтому полезно: Java: Как узнать, какой jar-файл использовать, учитывая имя класса?

PhiLho
источник
Ссылка на сайт Jad была удалена, так как URL-адрес припаркован. Его по-прежнему можно найти на web.archive.org/web/20080106184313/http://www.kpdus.com/… но Jad сегодня все равно устарел.
PhiLho
35

Я лично использую JD-GUI. Это бесплатный «декомпилятор», так как он позволяет вам видеть исходный код, классы и объекты в классах, а также видеть структуру файла в древовидном меню слева. Однако это не позволяет вам изменять классы напрямую.

Сайт JD-GUI: http://jd.benow.ca/

Azulflame
источник
Это работает кроссплатформенно, в то время как 7-Zip, упомянутый в другом ответе, специфичен для Windows.
Брэд Купит
Я использовал Archive Utility на OS X, работал нормально. Большинство (не) почтовые утилиты должны работать, независимо от платформы.
Greenonline
23

Если кто-то еще этого не знает, JAR-файл - это просто ZIP-файл, который содержит классы программы, ресурсы и т. Д., А также некоторые метаданные. Вы можете извлечь один, чтобы увидеть, как он сложен.

Поэтому я использую unzipкоманду, которую легко запомнить и использовать.

unzip -l <jar-file-name>.jar

Например, если у вас есть JAR-файл с именем, test.jarто unzip -l test.jarбудет перечислено все содержимое JAR-файла.

Хотя все остальные ответы хороши, но в большинстве из них вам придется использовать какое-то программное обеспечение, например, 7 zipили JDKкакой-либо другой инструмент Eclipse, в то время как для этого не нужно иметь какой-либо из этих больших программ, и он поставляется по умолчанию в Linux. и Mac, так что его очень легкий и удобный в использовании .

Вы также можете использовать zipinfo <your jar file>. если ваша ОС поддерживает это.

Opster Elasticsearch Ninja
источник
1
@Boop спасибо за предложение. добавит его в мой ответ
Opster Elasticsearch Ninja
1
Если проводник файлов поддерживает zip, переименование jar в .zip также работает (например, в windows)
Rhayene
16

Имена методов, поля и т. Д.

Добавляя jar-файл к проекту в IDE, вы обычно можете видеть методы и имена полей, но не детальную реализацию. NetBeans может сделать это, возможно, Eclipse, IntelliJ и т. Д. Вы можете просматривать структуру jar непосредственно в IDE.

Просто содержимое

Для чего-либо, например, просмотра содержимого, вы можете использовать:

  • jar tvf jarfile.jar
  • winzip или любой zip-инструмент

Исходный код

Для доступа к исходному коду вы должны использовать декомпилятор, такой как JAD или один из его внешних интерфейсов или другой декомпилятор. Если код запутан, то ...

Сообщество
источник
10

Расширяя ответ Tom Hawtin, вы можете направить список, чтобы отфильтровать нужный класс или файлы:

jar tf my-fat-jar-file.jar | grep filename

Это должно работать на bash / zsh и аналогичных файлах, или на eshell emacs.

Дополнительная информация: https://docs.oracle.com/javase/tutorial/deployment/jar/view.html.

Хосе Мигель
источник
7
jar -tvf file_name.jar

выше будет печатать только имена файлов .

Чтобы просмотреть содержимое файлов, вы можете извлечь файлы в папке :

jar -xvf file_name.jar

это разархивирует файл jar и поместит содержимое в тот же каталог, где вы его запускаете.

Или в Windows переименуйте файл .jar в .zip и затем вы можете разархивировать, чтобы извлечь и просмотреть содержимое файла jar. Поскольку jar является внутренним zip-файлом.

Анил Капур
источник
6

Используйте WinRar . Это откроет структуру папок для вас в целости и сохранности. Также позволяет редактировать в архиве, сохраняя пути.

В конце концов, JAR-файл - это только ZIP-архив.

Миннесота
источник
6

Если вам нравится видеть, что внутри, просто переименуйте в качестве первого варианта ниже ..

  1. F2 & Rename to jarfile.zip // Используем любую расстегивающую молнию ...

  2. jar tvf jarfile.jar

  3. jar tf jarfile.jar

Какой-то Java парень
источник
5

Если я правильно понимаю, вы хотите видеть не только классы, но и методы, свойства и так далее. Единственный известный мне инструмент, который может это сделать, - это Eclipse - если вы добавите jar в проект classpath, вы сможете просматривать его классы с помощью методов и свойств, используя обычный проводник пакетов.

Во всяком случае, это хорошая идея для хорошего автономного инструмента Java

Йони Ройт
источник
Обратите внимание, что файл jar должен находиться в папке «Библиотеки со ссылками», а не только в «libs». А в случае библиотеки Apache Commons вы не просматриваете source.jar, вы просматриваете оригинал и затем присоединяете источник, когда Eclipse запрашивает.
Нумен
4

Джад клунки и больше не поддерживается. Я переключился на «Java Decompiler» , который имеет приятный пользовательский интерфейс и поддержку новых языковых функций.

Каждый используемый мной декомпилятор работает с кодом, который он не может успешно декомпилировать. Для них это помогает понять дизассемблированный байт-код Java, созданный стандартным инструментом JDK, javap .

Эриксон
источник
3

Ну, jar-файл - это просто zip-файл, поэтому, если вы разархивируете его (с помощью вашей любимой утилиты разархивирования), вы получите все файлы внутри.

Если вы хотите заглянуть в файлы классов, чтобы увидеть методы, вам понадобится инструмент для этого. Как упоминает PhiLho, Eclipse способен сделать это (по умолчанию), и я думаю, что большинство Java IDE способны на это.

Йерун Хейманс
источник
3

В Eclipse 3.4 делаю

  1. Перетащите указанный файл jar в проект Java. Появляется копия файла JAR.
  2. Щелкните правой кнопкой мыши файл JAR и выберите «Build Path» -> «Add to Build Path».
  3. Файл JAR перемещается в узел «Библиотеки со ссылками», где он может быть открыт и перемещаться в панели Project Explorer.

Если просмотр исходного кода тоже является проблемой, откройте новый вопрос.

Для навигации на уровне Jar-файла (в виде zip-файла) я использую 7zip, который работает очень хорошо, и позволяет просматривать и редактировать записи, что отлично подходит для устранения неполадок.

Турбьерн Равн Андерсен
источник
3

Один из способов сделать это - открыть перспективу в «Проводнике пакетов». Делая это, вы можете увидеть структуру вашей банки с деталями класса. Для этого проверьте папку библиотеки в вашем проекте с помощью проводника пакетов.

Окно >> Показать представление >> Другое >> Java >> Package Explorer

Другой способ, вы можете использовать JarPlug в качестве плагина Eclipse. Это работает в eclipse / springsource

http://jar-plug.sourceforge.net/

Зия
источник
3

Если вы находитесь в Windows и используете powershell и ищете файл в банке, вы можете сделать:

jar -tf .\[JAR_NAME] | where {$_ -match "[FILENAME]"}
Джеймс
источник
2

Вы можете открыть их с помощью большинства утилит декомпрессии в эти дни, а затем просто получить что-то вроде DJ Java Decompiler, если вы хотите просмотреть исходный код.

Джон Т
источник
2

Мое требование состояло в том, чтобы просмотреть содержимое файла (например, файла свойств) внутри фляги, фактически не извлекая флягу. Если кто-то достиг этой темы, как я, попробуйте эту команду -

unzip -p myjar.jar myfile.txt

Это хорошо сработало для меня!

Субхашри Прадхан
источник
2

Я думаю, что Java Decomplier - ваш лучший вариант, который вы можете скачать здесь: http://jd.benow.ca/ предварительный просмотр

Зиад Алзарка
источник
1

Я предпочитаю JAR Browser , он имеет простой интерфейс, где вы можете просматривать несколько JAR-файлов и искать определенный класс по нескольким JAR-файлам одновременно.

audiodude
источник
1

Eclipse 3.4 JDT

Это не самый быстрый способ, потому что вы должны сначала перетащить его в свое затмение. Но у вас будет полный просмотр классов Java, даже если включена декомпиляция.

Деннис С
источник
1

Я установил действие по умолчанию в Windows «Открыть с помощью WinZip». Это облегчает управление JAR-файлами как архивами. Вы даже можете добавлять / удалять файлы вручную.

Крис Нава
источник
1

Этот Jar Explorer достаточно хорош.
Поддерживает три типа декомпиляторов: JD, Procyon и Fernflower.
Позволяет искать файлы и дубликаты в любом архиве Java.
Также пользователь может изменять jar с помощью файлов D & D и редактировать некоторые файлы, не относящиеся к классу. введите описание изображения здесь введите описание изображения здесь

user12377884
источник
Пожалуйста, не размещайте какой-либо инструмент или библиотеку в качестве ответа. По крайней мере, продемонстрируйте, как это решает проблему в самом ответе.
Das_Geek
0

Вы можете попробовать JarSpy . Есть версия плагина IDEA, которую я использую.

Дэн Дайер
источник
0

Ваша IDE также должна поддерживать это. Моя IDE (SlickeEdit) называет это «библиотекой тегов». Просто добавьте библиотеку тегов для файла JAR, и вы сможете просматривать классы и методы в иерархическом порядке.

ДЕРЕВО
источник
0

Вы можете попробовать JarNavigator для просмотра и поиска содержимого файла JAR .

Kumaravel
источник
0

java -xf some-j.jar разархивирует файл JAR.

MKatleast3
источник
это jar -xf someJar.jar
Prajwal