2015-02-08 14 views
20

IDEA ha una grande funzionalità incorporata - decompilatore. Funziona alla grande. Posso copiare il codice sorgente, ma non riesco a trovare l'opzione per estrarre tutte le classi java decompilate in file java.
Questo progetto ha un sacco di classi e pacchetti java, quindi sarò troppo lungo per copiare questo manualmente.
Qualcuno sa come estrarre i file di origine java. ThxCome decompilare in java files intellij idea

risposta

16

Per utilizzare il decompilatore Java IntelliJ dalla riga di comando per un pacchetto jar seguire le istruzioni fornite qui: https://github.com/JetBrains/intellij-community/tree/master/plugins/java-decompiler/engine

+0

Il decompilatore IntelliJ Java funziona molto bene – axaluss

+3

I parametri di default di IDEA sono '-hdc = 0 -dgs = 1 -rsy = 1 -rbr = 1 -lit = 1 -nls = 1 -mpm = 60' puoi vederli nel seguente link [github] (https://github.com/JetBrains/intellij-community/blob/master/plugins/java- decompilatore/plugin/src/org/jetbrains/java/decompilatore/IdeaDecompiler.kt) – kraken

+2

Qualcuno sa dove trovare fernflower.jar nell'installazione di IntelliJ IDEA? Ho cercato l'ID/Applicazioni/IntelliJ IDEA CE.app/Contents' sul mio Mac ma non sono riuscito a trovarlo. –

3

Il decompilatore di IntelliJ IDEA non è stato progettato per questo tipo di utilizzo. Serve solo ad aiutare i programmatori a dare un'occhiata al bytecode delle classi java che stanno sviluppando. Per decompilare un sacco di file di classe di cui non si dispone di codice sorgente, è necessario un altro decompilatore Java, specializzato per questo lavoro, che molto probabilmente esegue autonomamente. Se tu google dovresti trovare un gruppo.

+0

ma ho copiato manualmente il codice e funziona. Forse c'è un modo per farlo automaticamente o scrivere uno script per copiare dall'archivio decompilato al progetto – bkdaaqra

2

Qualche tempo fa ho utilizzato JAD (JAva Decompiler) per ottenere questo risultato. Non penso che il decompilatore di IntelliJ sia stato incorporato con l'esportazione in mente. È più di uno strumento per aiutare a guardare attraverso le classi in cui le fonti non sono disponibili.

JAD è ancora disponibile per il download, ma non credo che nessuno lo mantiene più: http://varaneckas.com/jad/

Ci sono stati numerosi plugin per esso, vale a dire JadClipse (avete indovinato, un modo per utilizzare JAD in Eclipse - vedere decompilato classi in cui il codice non è disponibile :)).

+0

Il decompilatore Intellij funziona in modo grandioso rispetto ad altri strumenti, ma a volte non può decompilare lamdas, quindi è sinonimo di invokedynamic, ma ho provato cfr, e lo fa bene, ma altro codice non buono come intellij, quindi devo copiare tutto il codice manualmente ( – bkdaaqra

2

Si potrebbe utilizzare uno di questi (è possibile sia utilizzarli online o il download, è alcune informazioni su ciascuno di essi): http://www.javadecompilers.com/

Quello IntelliJ IDEA utilizza è fernflower, ma non può gestire le cose recenti - come gli interruttori String/Enum, i generici (non ho testato personalmente questo, ho solo letto a riguardo), ... Ho appena provato cfr dal sito Web di cui sopra e il risultato è stato lo stesso con il built-in decompilatore (tranne per l'interruttore Enum che avevo nella mia classe).

12

Seguire le istruzioni per IntelliJ JD plugin. Oppure vedi un estratto dalle istruzioni sottostanti.

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

+ significa 1 o più volte
<source>: file o directory con file da decompiled. Le directory sono scansionate in modo ricorsivo. Le estensioni di file consentite sono class, zip e jar.
<destination>: destinazione directory

Esempio:

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

essere consapevoli che se si passa un file ".jar" per la sorgente, si creerà un altro file ".jar" nella destinazione tuttavia, all'interno del nuovo file ".jar", i file saranno .java anziché .class (non esploderà il jar).

+2

Come posso ottenere il file fernflower.jar? – asmaier

+0

@naXa: Davvero? Ti piace quanti effettivamente utili .jars si sono presentati quando googleing? Non così tanti, in realtà ... – Make42

+0

@ Make42 Non l'ho capito. Bene, fernflower è un progetto open source. Significa che tutti possono confezionare un barattolo per se stesso. – naXa

8

A partire da agosto 2017 e IntelliJ V2017.2, la risposta accettata non sembra più completamente precisa: non è disponibile l'fernflower.jar.

Il file jar si chiama java-decompiler.jar e non include il manifesto principale ... Invece è possibile utilizzare il seguente comando (da un Mac installazione):

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

(si otterrà il torto Usage comando, ma funziona).