How to decompile a whole Jar file?
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.
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.
How to decompile a jar into .java files from command prompt
The JD-CMD GitHub project claims to be able to do so. However, most people I know use JD-GUI.
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.
I should include that when a source file is compiled, things like the variable assignment and the names of those variables are changed. Similarly, syntactic sugar is changed into what it actually is (such as x += i
turns into x = x + i
).
How can I decompile many jars at once?
Download JAD Decompiler.
Unjar all your jar files (using the command
jar xvf
) to some directory. Let's call this${unjar.dir}
.Create a directory for JAD to write out the decompiled sources. Let's call this
${target.dir}
.Execute the following command:
jad -o -r -sjava -d${target.dir} ${unjar.dir}/**/*.class
options are:
-o - overwrite output files without confirmation
-r - restore package directory structure
-s <ext> - output file extension (default: .jad)
Can jar files be decompiled to get original source?
Unless you explicitly packaged your source code in the JAR file, there's no way to get back the original source. You could try using a decompiler (like this) but that will hardly give you nice, readable code.
The best solution would be to stop using your computer right now. Then use a recovery tool to recover your deleted files. The more recently it was deleted, the higher the chance you'll get it back. There are lots of tools that can be used to do this (just Google it).
Java decompiler, open jar excecutable file in eclipse and see source code
Unzip the .jar file. (A jar file is really a zip file), and then open the .class files in eclipse.
Related Topics
Can the Android Sdk Work with Jdk 1.7
Countdowntimer in Minutes and Seconds
Firebase Firestore Get Data from Collection
I Would Like to Set My Variables at the Top of My Class Instead of in the Method
How Do Jps, Jinfo, Jstat, Jmap and Jstack Get Information About Local Java Processes
How to Find Java Heap Size and Memory Used (Linux)
What Happens When I Throw a C++ Exception from a Native Java Method
What Is the Jasperrepots-Fonts Jar for and How to Use It
How to View Visual Gc in Visualvm
Opening a Shell and Interacting with Its I/O in Java
How to Close Rmiregistry Running on Particular Port
Garbage Collector Log (Loggc) File Rotation with Logrotate Does Not Work Properly
Log4J Does Not Recreate Files on Deletion
Namenode: Java.Net.Bindexception
Why Does My Java Gui "Jump" When Moving It the First Time
Moving from Jdk 1.7 to Jdk 1.8 on Ubuntu
Why Does My Eclipse Luna 4.4 Crash on Debian Wheezy 7.4 with Oracle Jdk8 64Bit