2015-02-08 8 views
20

IDEA имеет отличную встроенную функцию - декомпилятор. Он отлично работает. Я могу скопировать исходный код, но я не могу найти вариант для извлечения всех декомпилированных классов Java в java-файлы.
В этом проекте много классов и пакетов java, поэтому я буду долго копировать это вручную.
Кто-нибудь знает, как извлечь исходные файлы Java. ThxКак декомпилировать java-файлы intellij idea

ответ

16

Чтобы использовать декомпилятор IntelliJ Java из командной строки для пакета банку следуйте инструкциям, приведенным здесь: https://github.com/JetBrains/intellij-community/tree/master/plugins/java-decompiler/engine

+0

Декомпилятор IntelliJ Java работает очень хорошо – axaluss

+3

По умолчанию параметры IDEA: '-hdc = 0 -dgs = 1 -rsy = 1 -rbr = 1 -lit = 1 -nls = 1 -mpm = 60' вы можете увидеть их в следующей ссылке [github] (https://github.com/JetBrains/intellij-community/blob/master/plugins/java- decompiler/plugin/src/org/jetbrains/java/decompiler/IdeaDecompiler.kt) – kraken

+2

Кто-нибудь знает, где найти fernflower.jar в установке IntelliJ IDEA? Я искал '/ Applications/IntelliJ IDEA CE.app/Contents' на моем mac, но не смог найти его. –

3

Декомпилятор IntelliJ IDEA не был построен с таким видом использования. Он предназначен только для того, чтобы помочь программистам заглянуть в байт-код классов Java, которые они разрабатывают. Для декомпиляции множества файлов классов, у которых у вас нет исходного кода, вам понадобится другой декомпилятор java, который специализируется на этой задаче и, скорее всего, работает автономно. Если вы google, вы должны найти связку.

+0

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

2

Некоторое время назад я использовал JAD (JAva Decompiler), чтобы добиться этого - я не думаю, что декомпилятор IntelliJ был включен с экспортом в виду. Это больше инструмент, помогающий просматривать классы, где источники недоступны.

JAD по-прежнему доступен для загрузки, но я не думаю, что кто-то поддерживает его больше: http://varaneckas.com/jad/

Были многочисленные плагины для него, а именно Jadclipse (как вы уже догадались, способ использовать JAD в Затмении - см декомпилированы классы, где код недоступен :)).

+0

Intellij decompiler отлично работает по сравнению с другими инструментами, но иногда он не может декомпилировать lamdas, поэтому он оставил invokedynamic, но я попробовал cfr, и он делает это хорошо, но другой код не так хорош, как intellij, поэтому мне нужно скопировать весь код вручную ( – bkdaaqra

2

Вы можете использовать один из них (вы можете как использовать их в Интернете или загрузить их, есть некоторая информация о каждом из них): http://www.javadecompilers.com/

использует Один IntelliJ IDEA является fernflower, но она не может обрабатывать последние вещи - например, переключатели String/Enum, дженерики (не проверяли это лично, только читали об этом), ... Я просто попробовал cfr с вышеуказанного веб-сайта, и результат был таким же, как со встроенным декомпилятор (за исключением переключателя Enum, который у меня был в моем классе).

12

Следуйте инструкциям для IntelliJ JD plugin. Или см. Выдержку из приведенных ниже инструкций.

java -jar fernflower.jar [<source>]+ <destination> 

+ означает 1 или более раз
<source>: файл или каталог с файлами, которые будут декомпилированные. Каталоги рекурсивно сканируются. Разрешенные расширения файлов - это класс, zip и jar.
<destination>: назначение каталога

Пример:

java -jar fernflower.jar -hdc=0 -dgs=1 -rsy=1 -lit=1 c:\Temp\binary\ -e=c:\Java\rt.jar c:\Temp\source\ 

Имейте в виду, что если вы передаете его файл «.jar» для источника, это создаст еще одну «.jar» файл в пункте назначения , однако, в новом файле .jar, файлы будут .java вместо .class файлов (это не взрывает банку).

+2

Как получить файл fernflower.jar? – asmaier

+0

@naXa: Действительно? Как и сколько действительно полезных .jars появилось, когда googleing? Не так много, на самом деле ... – Make42

+0

@ Make42 Я не понял. Ну, fernflower - проект с открытым исходным кодом. Это означает, что каждый может упаковать банку для себя. – naXa

8

По состоянию на август 2017 года и IntelliJ V2017.2 принятый ответ, похоже, не совсем точен: fernflower.jar не используется.

Файл баночки называется java-decompiler.jar и не включает в себя главный манифест ... Вместо этого вы можете использовать следующую команду (от Mac установки):

java -cp "/Applications/IntelliJ IDEA.app/Contents/plugins/java-decompiler/lib/java-decompiler.jar" org.jetbrains.java.decompiler.main.decompiler.ConsoleDecompiler 

(вы получите неправильное Использование команда, но она работает).