Преобразование файла класса в файлы Java

У меня есть один файл War (Java-приложение), состоящий из файла 64 классов вместе с файлами изображений /CSS/JS. Я потерял источник этого военного файла. Теперь я хочу сделать некоторые изменения в коде. Я ищу советы экспертов от сообщества по следующим вопросам.

  1. Есть ли лучший способ конвертировать файлы.class в файл.java без потери какого-либо раздела кода?
  2. Каковы инструменты, если таковые имеются для этой задачи?
  3. Каковы проблемы / недостатки преобразования файлов.class в файлы.java для воссоздания файла войны?

3 ответа

Решение

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

В частности, вы можете использовать Git с GitHub, с открытым исходным кодом размещаются бесплатно, а если вы хотите защитить свой код, вы можете получить коммерческую подписку, которая в любом случае будет дешевой.

На этот раз помогите себе с помощью Java-декомпилятора, такого как JD:

  1. Используйте декомпилятор Java для декомпиляции байт-кода.
  2. Создать репозиторий git из декомпилированных классов Java
  3. Постоянно синхронизировать его с удаленным хранилищем
  1. Преобразование в байт-код Java практически полностью обратимо. Как сказал @StephenC: в восстановленных источниках вы потеряете комментарии, имена локальных переменных и т. Д. Он может не скомпилироваться сразу, но вы сможете снова его скомпилировать с небольшой модификацией.

  2. Вам нужен Java Decompiler, чтобы сделать это. Попробуйте JD-GUI или DJ Java Decompiler

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

JD, как упомянул @DarkXphenomenor, очень хорош. Есть даже плагин Eclipse.

Недостатками, как правило, являются:

  • Вы теряете все комментарии.
  • В зависимости от отладочной информации в файле класса, вы теряете номера строк.
  • Вы можете потерять имена локальных переменных.
  • Иногда полученный Java-код может не скомпилироваться. Декомпиляторы могут потерпеть неудачу с конструкциями comples. Внутренние классы приходят на ум. Это легко исправить вручную.
Другие вопросы по тегам