javajardecompiler

How to decompile a whole Jar file?


Does anyone know of a free decompiler that can decompile an entire Jar file instead of a single class? I have a problem with sub classes like name$1.class name$2.class name.class


Solution

  • 2023: splashout suggests in the comments the Vineflower/vineflower decompiler (releases), renaming from Quiltflower to Vineflower.

    java -jar vineflower.jar -dgs=1 c:\Temp\binary\library.jar c:\Temp\souce
    

    2022 update: QuiltMC/quiltflower is the latest most advanced Java decompiler:

    Quiltflower is a modern, general purpose decompiler focused on improving code quality, speed, and usability.
    Quiltflower is a fork of Fernflower and Forgeflower.

    Changes include:

    • New language features (Try with resources, switch expressions, pattern matching, and more)
    • Better control flow generation (loops, try-catch, and switch, etc.)
    • More configurability
    • Better error messages
    • Javadoc application
    • Multithreading
    • Optimization
    • Many other miscellaneous features and fixes

    Originally intended just for use with the QuiltMC toolchain with Minecraft, Quiltflower quickly expanded to be a general purpose java decompiler aiming to create code that is as accurate and clean as possible.

    If the name sounds familiar it's because Quiltflower is a fork of Fernflower, the (in)famous decompiler that was developed by Stiver, maintained by Jetbrains, and became the default decompiler in Intellij IDEA.
    Fernflower also quickly found its way into many other tools.

    Over the past year, Quiltflower has added support for features such as modern string concatenation, a code formatter, sealed classes, pattern matching, switch expressions, try-with-resources, and more. Quiltflower also focuses on the code quality of the decompiled output, and takes readability very seriously.

    See output examples.

    Runs nice with jbang

    https://github.com/QuiltMC/quiltflower/releases/download/1.8.1/quiltflower-1.8.1.jar
    

    Or:

    java -jar quiltflower.jar -dgs=1 c:\Temp\binary\library.jar c:\Temp\binary\Boot.class c:\Temp\source\
    

    2009: JavaDecompiler can do a good job with a jar: since 0.2.5, All files, in JAR files, are displayed.

    http://java.decompiler.free.fr/sites/default/screenshots/screenshot1.png

    See also the question "How do I “decompile” Java class files?".

    The JD-Eclipse doesn't seem to have changed since late 2009 though (see Changes).
    So its integration with latest Eclipse (3.8, 4.2+) might be problematic.

    JD-Core is actively maintained.

    Both are the result of the fantastic work of (SO user) Emmanuel Dupuy.


    2018: A more modern option, mentioned in the comments by David Kennedy Araujo:

    JetBrains/intellij-community/plugins/java-decompiler/engine

    Fernflower is the first actually working analytical decompiler for Java and probably for a high-level programming language in general.

    java -jar fernflower.jar [-<option>=<value>]* [<source>]+ <destination>
    
    java -jar fernflower.jar -hes=0 -hdc=0 c:\Temp\binary\ -e=c:\Java\rt.jar c:\Temp\source\
    

    See also How to decompile to java files intellij idea for a command working with recent IntelliJ IDEA.


    2022 update: Florian Wendelborn suggests in the comments

    this one works well: jdec.app from Leonardo Santos.