The “Java Decompiler project” aims to develop tools in order to decompile and analyze Java 5 “byte code” and the later versions.

JD-Core is a library that reconstructs Java source code from one or more “.class” files. JD-Core may be used to recover lost source code and explore the source of Java runtime libraries. New features of Java 5, such as annotations, generics or type “enum”, are supported. JD-GUI and JD-Eclipse include JD-Core library.

JD-GUI is a standalone graphical utility that displays Java source codes of “.class” files. You can browse the reconstructed source code with the JD-GUI for instant access to methods and fields.

JD-Eclipse is a plug-in for the Eclipse platform. It allows you to display all the Java sources during your debugging process, even if you do not have them all.

JD-IntelliJ is a plug-in for... the IntilliJ IDE.

JD-Core, JD-GUI & JD-Eclipse are open source projects released under the GPLv3 License.

 
  • JD-Core and JD-GUI are written in Java and Groovy.
  • JD-Core works with most current compilers including the following:
    • jdk1.1.8, jdk1.3.1, jdk1.4.2, jdk1.5.0, jdk1.6.0, jdk1.7.0
    • jrockit90_150_06
    • jikes-1.22
    • harmony-jdk-r533500
    • Eclipse Java Compiler v_677_R32x, 3.2.1 release
  • JD-GUI supports Drag and Drop.
  • JD-GUI supports JAR & ZIP files.
  • JD-GUI displays color coded Java source code.
  • JD-GUI allows you to browse the “class” files hierarchy.
  • JD-GUI displays “log” files, and allow you to decompile “class” files appearing in Java stack traces.
  • Known limitations:

JD-GUI is a standalone graphical utility that displays Java source codes of “.class” files. You can browse the reconstructed source code with the JD-GUI for instant access to methods and fields.

Releases

Source code

Thanks

Thanks to Andy Taylor to host JD-GUI files on benow.ca

Donations

Did JD-GUI help you to solve a critical situation? Do you use JD-Eclipse daily? What about making a donation?

 

Legend: enhancement, major enhancement, bug fix, major bug fix

JD-GUI
  • 1.0.0 25 Mar 2015
    • Refactoring & porting from C++ to Java/Groovy.
    • Moves the project to GitHub.
    • JD-GUI 1.0.0 includes JD-Core 0.7.1.
  • 0.3.7 17 Aug 2014
    • Improved exploration of class files by replacing the modal dialogs by "stay on top" windows.
    • JD-GUI includes JD-Core 0.7.1.
  • 0.3.6 05 Nov 2013
    • Removed all references to "java.decompiler.free.fr".
    • Updated source pages after changing preferences.
    • Unload repositories (JAR files or directories) when tabs are closed.
    • Fixed minor bug on history management.
    • JD-GUI includes JD-Core 0.7.0.
  • 0.3.5 18 Oct 2012
    • JD-GUI includes JD-Core 0.6.2.
  • 0.3.4 28 Aug 2012
    • JD-GUI includes JD-Core 0.6.1.
  • 0.3.3 18 Aug 2010
    • Fixed crash when application is closing.
    • Added the capability to display XML files (.xsd, .xsl, .rng, .xhtml).
    • Added capability to hide the prefixes 'this'.
    • JD-GUI includes JD-Core 0.6.0.
  • 0.3.2 20 Mar 2010
    • Added an outline view in the navigation trees.
    • Added an outline view popup window.
    • Improved enlightenment of fields and methods from search results.
    • Improved hyperlinks on the log pages.
    • Improved tab names.
    • OSX: Fixed bug on "Info.plist" file.
    • OSX: DnD to docked JD-GUI icon works.
    • OSX: Optimisation of tree font.
    • Linux: Optimisation of tree font.
    • Added hyperlink on "Premain-Class' in "MANIFEST.MF".
    • Limitation of depth of automatic folder exploration.
    • Fixed bug on octal and unicode representation of characters.
    • Added capability to escape unicode characters.
    • Improved history management.
    • JD-GUI includes JD-Core 0.5.4.
  • 0.3.1 22 Nov 2009
    • Indexation of annotations.
    • Display packages of unarchived projects.
    • Fixed bug on "Search" dialog box.
    • Fixed bug on "Open Type Hierarchy" dialog box.
    • Fixed bug on "Open Type Hierarchy" dialog box.
    • Fixed bug on the process of project exploration.
    • Improved the robustness of indexation against the corrupted classes.
    • JD-GUI includes JD-Core 0.5.3.
  • 0.3.0 29 Oct 2009
    • Added an engine indexing.
    • Added a "Search" dialog box.
    • Added an "Open Type Hierarchy" dialog box.
    • Added capability to open Java Core files generated by IBM JVM.
    • JD-GUI includes JD-Core 0.5.2.
  • 0.2.10 01 Jul 2009
    • Fixed bug with focus.
    • Fixed bug with tree view.
    • Added the name of the decompiled class in the title of the application.
    • Added the ZIP file support.
    • Added the "Go to Line" dialog box.
    • Added the highlightment of the words.
    • JD-GUI includes JD-Core 0.5.1.
  • 0.2.9 26 Apr 2009
    • Added capability to hide/show “import” statements.
    • JD-GUI includes JD-Core 0.5.0.
  • 0.2.8 06 Mar 2009
    • Improved the ".properties" file editor.
    • Fixed crash when clicking on the back button.
    • Improved source code layout.
    • JD-GUI includes JD-Core 0.4.7.
  • 0.2.7 23 Dec 2008
    • Added menu "Recent Files".
    • JD-GUI includes JD-Core 0.4.6.
  • 0.2.6 23 Nov 2008
    • Fixing crash due to loading of small JAR files.
    • Added the capability to display XML files (.xml, .xsd, .tld), MANIFEST.MF files, properties files and text files.
    • Added the entries "Post Suggestions" and "Report Bugs" on menu "Help".
    • JD-GUI includes JD-Core 0.4.5.
  • 0.2.5 11 Sep 2008
    • All files, in JAR files, are displayed.
    • JD-GUI includes JD-Core 0.4.4.
  • 0.2.4 03 Aug 2008
    • Added capability to alert user when a new version is available.
    • Fixed bug on generation of color coded Java source code.
    • JD-GUI includes JD-Core 0.4.3.
  • 0.2.3 13 Jul 2008
    • Added capability to decompile “.class” files appearing in Java stack traces.
    • Improvement the layout of Java sources.
    • JD-GUI includes JD-Core 0.4.2.
  • 0.2.2 27 Jun 2008
    • Added capability to display original line numbers if this information is available in “.class” files.
    • Fixed many memory leaks.
  • 0.2.1 24 May 2008
    • Added capability to save Java sources of single “.class” files, or of all classes contained in JAR files.
    • Fixed a bug on the reloading of links between pages.
    • JD-GUI includes JD-Core 0.4.0.
  • 0.2.0 13 Apr 2008
    • Re-engineering of JD-GUI.
    • Added search panel.
    • JD-GUI includes JD-Core 0.3.5.
  • 0.1.3 20 Mar 2008
    • Fixed crash caused by 'Open Type' window when an empty JAR file is opened in JD-GUI.
    • Added tooltips on the toolbar.
    • JD-GUI includes JD-Core 0.3.4.
  • 0.1.2 16 Feb 2008
    • A new 'Open Type' window is included to quickly find a type.
    • Fixed bug of focus on tree view.
    • JD-GUI includes JD-Core 0.3.3.
  • 0.1.1 03 Feb 2008
    • JD-GUI supports JAR files.
    • JD-GUI includes JD-Core 0.3.2.
  • 0.1.0 15 Jan 2008
    • First public version.
JD-Core
  • 0.7.1 17 Aug 2014
    • Fixed bug on recognition of ".class" expressions.
    • Fixed bug on recognition of "Switch Enum" instructions.
    • Replacement of numeric values by known numeric constants (e.g. Long.MAX_VALUE).
    • Removed unnecessary "java.lang" prefixes.
    • Fixed bug on recognition of try-cacht statements containing a ternary operator on last position.
    • Added cast instructions on returned generic variables.
    • Hiding synthetic fields of anonymous classes.
    • Internally, improved JD-Core memory management (complex Smart Pointer C++ 11 replaced by basic but very efficient memory pool).
  • 0.7.0 05 Nov 2013
    • Improved source code layout.
    • Improved display for-enum statements.
    • Fixed a bug on the display of anonymous classes in anonymous classes.
    • Added an algorithm to realign the decompiled source code to the original line numbers.
    • Improved stability (catching of Hardware Exceptions under Windows and Segmentation Faults under Linux and OSX).
    • Fixed a bug on the decompilation of the "Switch Enum" statement.
  • 0.6.2 18 Oct 2012
    • Fixed bug on the decompilation of expressions : "(a - b) / 100.0D" was displayed as "a - b / 100.0D".
  • 0.6.1 28 Aug 2012
    • Improved recognition of instruction flows.
    • Significant improvement in the stability of the core.
  • 0.6.0 18 Aug 2010
    • Improved recognition of instruction flows (Reduction of methods marked with ERROR and instructions "break label").
    • Display calls to constructor "this()".
    • Display ';' after 'break label'.
    • Display enum constructors.
  • 0.5.4 20 Mar 2010
    • Fixed bug on call of "this(...)" in constructors.
    • Display unique constructor without argument and launching exception(s).
    • Fixed bug on octal representation of characters.
    • Improved reconstruction of ".class" generated by JRE 1.4.
    • Display initial value of boolean attribute.
    • Display constructors of Enum.
    • Fixed major bug on pre and post incrementation statements.
    • Java 5: Display switch+Enum.
    • Java 7: Display switch+String.
    • Fixed bug on priority of operators.
    • Remove extra parentheses associated with return statement.
  • 0.5.3 22 Nov 2009
    • Fixed bug on decompilation of 'assert'.
    • Improved the robustness of JD-Core against the corrupted classes.
  • 0.5.2 29 Oct 2009
    • Added support of 'assert'.
    • Fixed bug on recongnition of the 'for' statements.
    • Fixed bug on recongnition of the synchronized blocks.
    • Fixed bug on recongnition the 'if' statements.
    • Fixed bug on recongnition the ternary statements.
    • Fixed bug on recongnition the 'try' statements.
  • 0.5.1 30 Jun 2009
    • Improved the reconstruction of the loops when a "try" or "synchronized" statement is on the last position.
    • Improved the reconstruction of the "if-else" statements when a "try" or "synchronized" statement is on the last position.
    • Removed extra "," at the beginning of parameters list.
    • Improved the reconstruction of the "break" and "continue" statements.
    • Fixed bug on floating point precision.
    • Fixed bug on the declaration of multi-dimensional arrays.
    • Improved the reconstruction of the Java 5 "for-each" loops.
    • Improved reconstruction of the "try ... catch ... finally" and "synchronized" statments.
    • Improved reconstruction of the keyword ".class" for Java 1.1.8.
  • 0.5.0 26 Apr 2009
    • Redesigned core to improve the decompilation of the inner classes.
    • Improved the reconstruction of the Java 5 “for-each” loops.
    • Fixed bug on declaration of variables.
    • Fixed bug on empty “finally” blocks.
  • 0.4.7 27 Feb 2009
    • Fixed bug on constants of type long.
    • Fixed bug on floating point precision.
    • Fixed bug on decompilation of multiple super interfaces.
    • Fixed bug on initialization of arrays of constants.
    • Fixed bug on boolean operators values.
    • Added capability to decompile Java 5 “for-each” loop.
  • 0.4.6 24 Dec 2008
    • Fixed bug with wrong qualified names.
    • Fixed bug with empty default constructor.
    • Fixed bug with nested while error.
    • Fixed bug in display of value of type "long".
  • 0.4.5 23 Nov 2008
    • Improved recontruction of ternary operator.
    • Improved decompilation of the Hashtable class compiled with javac 1.5.0 and 1.6.0.
    • Fix bug on declaration of interface.
  • 0.4.4 11 Sep 2008
    • Improved reconstruction of statments “try ... catch ... finally” and “synchronized”.
    • Fixed bug with reconstruction of instructions “dup2_x1”.
    • Added reconstruction of assigment operators.
    • Fixed memory leak.
    • Fixed many other bugs...
  • 0.4.3 03 Aug 2008
    • Fixed bug with reconstruction of statment “if” in the blocks “try”.
    • Improved reconstruction of obfuscated variable names.
    • Fixed bug with reconstruction of comparisons of variables of types “long” and “double”.
    • Fixed bug with display of constants of type “long”.
  • 0.4.2 13 Jul 2008
    • Added initialization of attributes instance.
  • 0.4.1 27 Jun 2008
    • Fixed many memory leaks.
  • 0.4.0 24 May 2008
    • Fixed many bugs...
    • Redesigned core to take advantage of the line numbers if this information is present in “.class” files.
    • Improved reconstruction of loops “for”.
    • Improved initialisation of arrays.
  • 0.3.5 13 Apr 2008
    • Fixed bug in generation of list of “import”.
    • Fixed bug in reconstruction of ternary operator.
    • Display annotations on method parameters.
  • 0.3.4 20 Mar 2008
    • Fixed crash caused by deserialization of annotations.
    • Improved reconstruction of Java keyword “class” compiled with JDK 1.1.8, 1.3.1 & 1.4.2, Jikes 1.22, Eclipse Java Compiler v_677_R32x and harmony-jdk-r533500.
    • Fixed bug in reconstruction of the “try...catch” statements.
    • Fixed bug in module for determination of type of local variables.
    • Improved reconstruction of blocs “try...finally” compiled with JDK 1.1.8.
  • 0.3.3 16 Feb 2008
    • Improved module for determination of type of local variables.
    • Improved creation of the “try...catch” statements.
    • Changed priority of operators '+=' and '-='.
    • Fixed syntax error on “throws” keyword.
    • Fixed bug of methods named “length()”.
    • Fixed bug in deserialization of "wide" instruction.
  • 0.3.2 03 Feb 2008
    • Fixed “java.util.Collections” 1.5 decompilation bug.
    • Renamed methods when their name is a Java keyword.
  • 0.3.1 15 Jan 2008
    • First public version.

JD-Eclipse is a plug-in for the Eclipse platform. It allows you to display all the Java sources during your debugging process, even if you do not have them all.

Release

Source code

Installation

  1. Download and unzip the JD-Eclipse Update Site,
  2. Launch Eclipse,
  3. Click on "Help > Install New Software...",
  4. Click on button "Add..." to add an new repository,
  5. Enter "JD-Eclipse Update Site" and select the local site directory,
  6. Check "Java Decompiler Eclipse Plug-in",
  7. Next, next, next... and restart Eclipse.

Thanks

Thanks to Andy Taylor to host JD-Eclipse Update Site files on http://benow.ca

Donations

Did JD-GUI help you to solve a critical situation? Do you use JD-Eclipse daily? What about making a donation?

 

Legend: enhancement, major enhancement, bug fix, major bug fix

JD-Eclipse
  • 1.0.023 Apr 2015
    • Porting from C++ to Java.
    • Moves the project to GitHub.
    • JD-Eclipse 1.0.0 includes JD-Core 0.7.1.
  • 0.1.55 Mar 2014
    • Improved stability.
    • Updated decompiled source pages after changing preferences.
    • Fixed bug on class file locator.
    • JD-Eclipse 0.1.5 includes JD-Core 0.7.0.
  • 0.1.4 16 Aug 2013
    • Fixed problem on "File Associations" under Eclipse Juno and the upper versions.
    • JD-Eclipse 0.1.4 includes JD-Core 0.5.3.
  • 0.1.3 17 Dec 2009
    • Added a preferences panel (Preferences > Java > Decompiler) to show/hide the line numbers and the metadata.
    • JD-Eclipse 0.1.3 includes JD-Core 0.5.3.
  • 0.1.2 26 Jul 2009
    • Improved the class file locator.
    • Added capability to edit the decompiled source files.
    • The Linux and Windows 64-bit platforms are supported.
    • JD-Eclipse 0.1.2 includes JD-Core 0.5.1.
  • 0.1.1 11 May 2009
    • The line numbers are displayed.
    • The meta-data and some additional informations are added.
    • The "Check for update" feature was removed.
    • JD-Eclipse runs under Mac OSX.
    • The JD-Eclipse protection, checking the current date, was removed.
    • JD-Eclipse 0.1.1 includes JD-Core 0.5.0.
  • 0.1.0 18 Feb 2009
    • First public version.
JD-Core
  • 0.7.1 17 Aug 2014
    • Fixed bug on recognition of ".class" expressions.
    • Fixed bug on recognition of "Switch Enum" instructions.
    • Replacement of numeric values by known numeric constants (e.g. Long.MAX_VALUE).
    • Removed unnecessary "java.lang" prefixes.
    • Fixed bug on recognition of try-cacht statements containing a ternary operator on last position.
    • Added cast instructions on returned generic variables.
    • Hiding synthetic fields of anonymous classes.
    • Internally, improved JD-Core memory management (complex Smart Pointer C++ 11 replaced by basic but very efficient memory pool).
  • 0.7.0 05 Nov 2013
    • Improved source code layout.
    • Improved display for-enum statements.
    • Fixed a bug on the display of anonymous classes in anonymous classes.
    • Added an algorithm to realign the decompiled source code to the original line numbers.
    • Improved stability (catching of Hardware Exceptions under Windows and Segmentation Faults under Linux and OSX).
    • Fixed a bug on the decompilation of the "Switch Enum" statement.
  • 0.6.2 18 Oct 2012
    • Fixed bug on the decompilation of expressions : "(a - b) / 100.0D" was displayed as "a - b / 100.0D".
  • 0.6.1 28 Aug 2012
    • Improved recognition of instruction flows.
    • Significant improvement in the stability of the core.
  • 0.6.0 18 Aug 2010
    • Improved recognition of instruction flows (Reduction of methods marked with ERROR and instructions "break label").
    • Display calls to constructor "this()".
    • Display ';' after 'break label'.
    • Display enum constructors.
  • 0.5.4 20 Mar 2010
    • Fixed bug on call of "this(...)" in constructors.
    • Display unique constructor without argument and launching exception(s).
    • Fixed bug of octal representation of characters.
    • Improved reconstruction of ".class" generated by JRE 1.4.
    • Display initial value of boolean attribute.
    • Display constructors of Enum.
    • Fixed major bug on pre and post incrementation statements.
    • Java 5: Display switch+Enum.
    • Java 7: Display switch+String.
    • Fixed bug on priority of operators.
    • Remove extra parentheses associated with return statement.
  • 0.5.3 22 Nov 2009
    • Fixed bug on decompilation of 'assert'.
    • Improved the robustness of JD-Core against the corrupted classes.
  • 0.5.2 29 Oct 2009
    • Added support of 'assert'.
    • Fixed bug on recongnition of the 'for' statements.
    • Fixed bug on recongnition of the synchronized blocks.
    • Fixed bug on recongnition the 'if' statements.
    • Fixed bug on recongnition the ternary statements.
    • Fixed bug on recongnition the 'try' statements.
  • 0.5.1 30 Jun 2009
    • Improved the reconstruction of the loops when a "try" or "synchronized" statement is on the last position.
    • Improved the reconstruction of the "if-else" statements when a "try" or "synchronized" statement is on the last position.
    • Removed extra "," at the beginning of parameters list.
    • Improved the reconstruction of the "break" and "continue" statements.
    • Fixed bug on floating point precision.
    • Fixed bug on the declaration of multi-dimensional arrays.
    • Improved the reconstruction of the Java 5 "for-each" loops.
    • Improved reconstruction of the "try ... catch ... finally" and "synchronized" statments.
    • Improved reconstruction of the keyword ".class" for Java 1.1.8.
  • 0.5.0 26 Apr 2009
    • Redesigned core to improve the decompilation of the inner classes.
    • Improved the reconstruction of the Java 5 “for-each” loops.
    • Fixed bug on declaration of variables.
    • Fixed bug on empty “finally” blocks.
  • 0.4.7 27 Feb 2009
    • Fixed bug on constants of type long.
    • Fixed bug on floating point precision.
    • Fixed bug on decompilation of multiple super interfaces.
    • Fixed bug on initialization of arrays of constants.
    • Fixed bug on boolean operators values.
    • Added capability to decompile Java 5 “for-each” loop.
  • 0.4.6 24 Dec 2008
    • Fixed bug with wrong qualified names.
    • Fixed bug with empty default constructor.
    • Fixed bug with nested while error.
    • Fixed bug in display of value of type "long".
  • 0.4.5 23 Nov 2008
    • Improved recontruction of ternary operator.
    • Improved decompilation of the Hashtable class compiled with javac 1.5.0 and 1.6.0.
    • Fix bug on declaration of interface.
  • 0.4.4 11 Sep 2008
    • Improved reconstruction of statments “try ... catch ... finally” and “synchronized”.
    • Fixed bug with reconstruction of instructions “dup2_x1”.
    • Added reconstruction of assigment operators.
    • Fixed memory leak.
    • Fixed many other bugs...
  • 0.4.3 03 Aug 2008
    • Fixed bug with reconstruction of statment “if” in the blocks “try”.
    • Improved reconstruction of obfuscated variable names.
    • Fixed bug with reconstruction of comparisons of variables of types “long” and “double”.
    • Fixed bug with display of constants of type “long”.
  • 0.4.2 13 Jul 2008
    • Added initialization of attributes instance.
  • 0.4.1 27 Jun 2008
    • Fixed many memory leaks.
  • 0.4.0 24 May 2008
    • Fixed many bugs...
    • Redesigned core to take advantage of the line numbers if this information is present in “.class” files.
    • Improved reconstruction of loops “for”.
    • Improved initialisation of arrays.
  • 0.3.5 13 Apr 2008
    • Fixed bug in generation of list of “import”.
    • Fixed bug in reconstruction of ternary operator.
    • Display annotations on method parameters.
  • 0.3.4 20 Mar 2008
    • Fixed crash caused by deserialization of annotations.
    • Improved reconstruction of Java keyword “class” compiled with JDK 1.1.8, 1.3.1 & 1.4.2, Jikes 1.22, Eclipse Java Compiler v_677_R32x and harmony-jdk-r533500.
    • Fixed bug in reconstruction of the “try...catch” statements.
    • Fixed bug in module for determination of type of local variables.
    • Improved reconstruction of blocs “try...finally” compiled with JDK 1.1.8.
  • 0.3.3 16 Feb 2008
    • Improved module for determination of type of local variables.
    • Improved creation of the “try...catch” statements.
    • Changed priority of operators '+=' and '-='.
    • Fixed syntax error on “throws” keyword.
    • Fixed bug of methods named “length()”.
    • Fixed bug in deserialization of "wide" instruction.
  • 0.3.2 03 Feb 2008
    • Fixed “java.util.Collections” 1.5 decompilation bug.
    • Renamed methods when their name is a Java keyword.
  • 0.3.1 15 Jan 2008
    • First public version.

JD-IntelliJ is a plug-in for IntelliJ IDEA, initiated by Brice Dutheil. It allows you to display all the Java sources during your debugging process, even if you do not have them all. Currently, the project is under development. The Java sources are hosted on Bitbucket. Your contributions are welcome.

Release 

Source code

Development

  1. Download the project from Bitbucket.
  2. Import it on IntelliJ IDEA.
  3. Create a new configuration with the type "plugin".
  4. Run the new configuration.

Donations

Did JD-GUI help you to solve a critical situation? Do you use JD-Eclipse daily? What about making a donation?