Преобразование файла класса в файлы Java
У меня есть один файл War (Java-приложение), состоящий из файла 64 классов вместе с файлами изображений /CSS/JS. Я потерял источник этого военного файла. Теперь я хочу сделать некоторые изменения в коде. Я ищу советы экспертов от сообщества по следующим вопросам.
- Есть ли лучший способ конвертировать файлы.class в файл.java без потери какого-либо раздела кода?
- Каковы инструменты, если таковые имеются для этой задачи?
- Каковы проблемы / недостатки преобразования файлов.class в файлы.java для воссоздания файла войны?
3 ответа
Если вы не хотите тратить ужасные времена на понимание декомпилированного байт-кода, пожалуйста, начните использовать систему контроля версий и удаленный репозиторий для любого проекта более двух классов.
В частности, вы можете использовать Git с GitHub, с открытым исходным кодом размещаются бесплатно, а если вы хотите защитить свой код, вы можете получить коммерческую подписку, которая в любом случае будет дешевой.
На этот раз помогите себе с помощью Java-декомпилятора, такого как JD:
- Используйте декомпилятор Java для декомпиляции байт-кода.
- Создать репозиторий git из декомпилированных классов Java
- Постоянно синхронизировать его с удаленным хранилищем
Преобразование в байт-код Java практически полностью обратимо. Как сказал @StephenC: в восстановленных источниках вы потеряете комментарии, имена локальных переменных и т. Д. Он может не скомпилироваться сразу, но вы сможете снова его скомпилировать с небольшой модификацией.
Вам нужен Java Decompiler, чтобы сделать это. Попробуйте JD-GUI или DJ Java Decompiler
В случае, если вы запутали свои источники, источники, которые вы восстановите, не будут труднее понять и проанализировать. В противном случае, немного повозившись, вы сможете вернуть свои источники.
JD, как упомянул @DarkXphenomenor, очень хорош. Есть даже плагин Eclipse.
Недостатками, как правило, являются:
- Вы теряете все комментарии.
- В зависимости от отладочной информации в файле класса, вы теряете номера строк.
- Вы можете потерять имена локальных переменных.
- Иногда полученный Java-код может не скомпилироваться. Декомпиляторы могут потерпеть неудачу с конструкциями comples. Внутренние классы приходят на ум. Это легко исправить вручную.