2012-06-11 3 views
-4

Я хотел бы разархивировать библиотеку jar, которую я использую, проверять классы, если ее базовая функциональность обновлена ​​до того, что представлено в GitHub.Unzipping Jars, чтобы получить класс .text

Как вы разархивируете файл .jar?

Update:

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

Благодарим вас за использование метода alegen для использования Java Decompiler. Вы можете декомпилировать классы.

+2

И что теперь вопрос? Щелкните правой кнопкой мыши -> Извлечь. Готово. – poitroae

ответ

2

Откройте JAR файл с помощью WinRAR, но если люди также не упаковал source code, вы найдете только .class файлы, которые содержат bytecode. Вам также нужно будет использовать decompiler; Обычно я использую JD Java Decompiler.

+0

Спасибо, мне нужно было знать декомпилятор. – sdfwer

2

Вы можете извлекать файлы из JAR-файла, используя различные инструменты, включая простые инструменты ZIP-файлов ... и, конечно же, команду jar, которая входит в состав JDK.

Похоже, что ваша проблема заключается в том, что вы хотите декомпилировать файлы .class в JAR-файле, чтобы вы могли сравнивать их с некоторым исходным кодом Java.

Ну, плохая новость в том, что это не сработает ... особенно в крупномасштабных масштабах. Да, есть декомпиляторы, которые (в хороший день) производят что-то похожее на Java. Тем не менее:

  • Декомпилированная Java не будет выглядеть как оригинальный исходный код, который использовался для создания файлов .class. Сравнение декомпилированных файлов с исходным кодом (или что-то на основе исходного исходного кода) будет утомительным и сложным процессом MANUAL.

  • Существует справедливая вероятность того, что декомпилированный код даже не будет действительным (компилируемым) Java.

Лучшим подходом может быть компиляция исходного кода на GitHub и попытка сравнить две версии файлов .class. Однако, даже это не прямо вперед, потому что:

  • В .class файлы содержат временные метки, и другие вещи, которые зависят от пути сборки, компиляции переключателей, и так далее. Вы должны выяснить, как удалить этот «шум» при сравнении файлов .class.

  • Различные версии Java-компилятора производят различные варианты класса.

  • Даже если номера версий classfile совпадают, в генерируемых байт-кодах могут быть отличия, специфичные для компилятора.


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

+0

Мне просто нужно увидеть несколько изменений метода, и если он немного декомпилирует, все равно будет хорошо. – sdfwer

1

Итак, что вы хотите сделать, это проверить, совпадают ли две банки, чтобы убедиться, что методы на github такие же, как и в вашей банке?

Я думаю, вы пытаетесь решить неправильную проблему здесь. Что вы должны сделать, так это просто проверить код из github и создать его самостоятельно. В корневом каталоге проекта должен быть файл README, INSTALL или что-то подобное.

Теперь, конечно, вам может не понадобиться новейшая версия проекта, вам может понадобиться последняя стабильная версия или еще что-то, что вполне выполнимо: просто скачайте выпуск, который вы хотите от git, и создайте себя. Теперь у вас есть как код, так и банку.

Если вы это сделаете, вы убедитесь, что код соответствует банку, и не требуется никакая декомпиляция, просто быстрый make или ant later, как указано в файле readme.

Смежные вопросы