Перегляд вмісту файлу .jar


226

Який був би найпростіший спосіб перегляду класів, методів, властивостей тощо у файлі jar? Я шукаю щось еквівалентне дуже корисному Lutz Roeder .NET Reflector - для Java


12
Чому ви не приймаєте відповідь?
Sanghyun Lee

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дасть вам більше деталей з конкретного файлу класу.


3
@salvob Дефіс вам не потрібен, як це потрібно після tarобов'язкових параметрів.
Том Хотін - тайклін

2
FYI, Вам може знадобитися додати 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 знаходиться клас, можливо, вони можуть зробити більше (тобто те, що ви запитали).

[EDIT] Посилання на нитку SO. Не те, що задається, але якось пов’язано, таким чином корисно: Java: Як я можу дізнатись, який jar jar-файл використовувати із назвою класу?


Посилання на веб-сайт Jad було видалено під час паркування URL-адреси. Його ще можна знайти на веб- сайті web.archive.org/web/20080106184313/http://www.kpdus.com/…, але Джад сьогодні застаріла.
PhiLho

35

Я використовую особисто JD-GUI. Це безкоштовний "декомпілятор", оскільки він дозволяє бачити вихідний код, класи та об'єкти в класах, а також бачити структуру файлів у меню дерева зліва. Однак це не дозволяє безпосередньо змінювати класи.

Веб-сайт JD-GUI: http://jd.benow.ca/


Це працює на платформі, тоді як 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якийсь інший інструмент затемнення, хоча для цього не потрібно мати будь-яке з цих великих с / ш, і воно за замовчуванням відбувається в Linux і mac, тому його дуже легкий і зручний у використанні .

Ви також можете використовувати zipinfo <your jar file>. якщо ваша ОС підтримує це.


1
@Boop дякую за пропозицію. додамо його до моєї відповіді
Opster Elasticsearch Ninja

1
Якщо провідник файлів підтримує zip, перейменування банку на .zip теж працює (наприклад, на windows)
Rhayene

16

Назви методів, поля тощо.

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

Просто вміст

Для того, щоб переглянути вміст, ви можете використовувати:

  • jar tvf jarfile.jar
  • winzip або будь-який поштовий інструмент

Вихідний код

Для доступу до вихідного коду, ви б використовували декомпілятор, такий як JAD або один із його фронтів або інший декомпілятор. Якщо код приховано, то ...


10

Розширюючи відповідь Тома Хотіна, ви можете подати список, щоб відфільтрувати потрібний клас або файли:

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

Це має працювати на bash / zsh та подібних програм, або на ешеллі 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


5

Якщо я правильно розумію, ви хочете бачити не тільки класи, але й методи, властивості тощо. Єдиний інструмент, який я знаю, що може це зробити, - це Eclipse - якщо ви додасте банку до classpath проекту, ви зможете переглядати його класи методами та властивостями за допомогою звичайного провідника пакетів.

У будь-якому випадку, це гарна ідея для хорошого самостійного інструменту Java


Зауважте, що банку має бути в папці "Посилання на бібліотеки", а не лише в "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

Один із способів зробити це - відкрити перспективу в "Пакетному досліднику". Роблячи це, ви можете побачити структуру вашої баночки з деталями класу. Для цього перевірте папку бібліотеки у вашому проекті за допомогою програми Explorer.

Вікно >> Показати перегляд >> Інше >> Java >> Провідник пакетів

Інший спосіб - ви можете використовувати JarPlug як плагін затемнення. Це працює в затемнення / джерело джерела

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

Це добре спрацювало для мене!



1

Я вважаю за краще браузер JAR , він має простий інтерфейс, де ви можете переглядати декілька JAR і шукати конкретний клас по декількох JAR одночасно.


1

Затемнення 3.4 JDT

Це не найшвидший спосіб, тому що потрібно спочатку перетягнути його у своє затемнення. Але ви будете мати повний перегляд класу java, навіть із включеною декомпіляцією.


1

Я встановив дію за замовчуванням у Windows на "Відкрити за допомогою WinZip". Це полегшує управління JAR-архівами як архівами. Ви навіть можете додавати / видаляти файли вручну.


1

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


Будь ласка, не просто публікуйте якийсь інструмент чи бібліотеку як відповідь. Принаймні продемонструйте, як вона вирішує проблему у самій відповіді.
Das_Geek


0

Ваш IDE також повинен це підтримувати. Мій IDE (SlickeEdit) називає його "бібліотекою тегів". Просто додайте бібліотеку тегів до файлу jar, і ви зможете переглядати класи та методи в ієрархічному порядку.






Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.