Ability to decompile a Java class file is quite helpful for any Java developer who wants to look into the source of any open source or propriety library used in project. Though I always prefer to
attach source in Eclipse of most common libraries like JDK but it’s not always possible with increasing number of dependencies. Java decompiler (a program which can decompile
Java class files to produce so urce files) is very helpful on such situation. By using Java decompiler you can easily check out source of any .class file. Thanks to Eclipse IDE and increasing number of free plug-in available for Java developers, You can have powerful Java decompile in your armory. Earlier I used to used JadEclipse an Eclipse plugin which works well with JAD decompiler but knowing about JAD decompiler is not supporting Java 1.5 source, I was in hunt of another suitable and useful Eclipse plugin which can decompile . class file. My search ends with JD-Eclipse , this is another free Eclipse plugin for non commercial and personal use which helps you to get source from class files. JD-Eclipse is easy to install and its site has detailed step by step guide on how to install JD-Eclipse plug-in. If you are already familiar with Eclipse plugin installation than it just a cake walk.
How to decompile Class file in Eclipse IDE

Once you have
JD-Eclipseinstalled and running, you probably need to restart
Eclipse once you installed plug-in. You are ready to decompile Java class file from Eclipse. In order to decompile class file, just open any of your Java project and go to Maven dependencies of libraries to see the
jar files included in your project. Just expand any jar file for which you don't have source attached in Eclipse and click on . class file. Now you can see the source code for that file in Java editor, simple and elegant isn't it. Though I highly recommend to
attach source code for JAR in Eclipse , at least for frequently used libraries like JDK or Spring as quality of decompiled code and original code is different. Original code gives better visibility and also shows comment while decompiled code is just bare minimum version.
How to decompile class file in Java – javap command example
Even with powerful Eclipse IDE and plugin, we may some time needs t o work on
command prompt esp ecially while working in Linux development servers and its not convenient to switch back and fourth for quick look on .class file or get some information from compiled form of source. Thanks to javap command you can decompile class file on the fly in command prompt. javap is standard binary which comes with JDK installation and resides in JAVA_HOME/bin directory. javap is similar to javac (java compiler) and work directly with .class file. In order to use javap command you must hav e
JAVA_HOME in your system path. you can verify this by typing " javap " in command prompt and if it doesn't complain and instead show some output like below than you are good to go. I f it
doesn't recognize the command means you need to set path, check how to set path in java more detailed steps.
abc@localhost:~/java javap No classes were specified on the command line. Try -help.
Now let's see what javap command offers us. We have a s imple
Java class wit h one field and one method.
abc@localhost:~/java cat Hello.java public class Hello { private String version= "1.2" ; public static void main ( String args []){ System . out . println ( "Running Hello" ) ; } }
abc@localhost:~/java javap Hello Compiled from "Hello.java" public class Hello extends java. lang . Object { public Hello () ; public static void main ( java. lang . String []) ; }
So it looks javap only provides information related to method in .class file. It also stat e the
constructor eve n default constructor added by Java compiler. javap can provide more information depending upon its command line option like - private will show all
private members . h ere is an example of running javap command with -private option:
abc@localhost:~/java javap - private Hello Compiled from "Hello.java" public class Hello extends java. lang . Object { private java. lang . String version ; public Hello () ; public static void main ( java. lang . String []) ; }
How to see bytecode from .class file
javap command can also show bytecodes form compiled class files. Just run javap with -c option and it will print byte codes of class file, as shown in below example:
abc@localhost:~/java javap -c Hello Compiled from "Hello.java" public class Hello extends java. lang . Object { public Hello () ; Code: 0 : aload_0 1 : invokespecial # 1 ; //Method java/lang/Object." ":()V 4 : aload_0 5 : ldc # 2 ; //String 1.2 7 : putfield # 3 ; //Field version:Ljava/lang/String; 10 : return
public static void main ( java. lang . String []) ; Code: 0 : getstatic # 4 ; //Field java/lang/System.out:Ljava/io/PrintStream; 3 : ldc # 5 ; //String Running Hello 5 : invokevirtual # 6 ; //Method java/io/PrintStream.println:(Ljava/lang/String;)V 8 : return
}
That's all on how to decompile class files in Java and Eclipse IDE . JD-Eclipse is an easy to use eclipse plugin and has detailed installation steps documented. if you are running on JDK lower than Java 5 than You can still use famous JAD decompiler and JADEclipse plug-in. Apart from these are many more which I haven't try. Just go to Eclipse market place and you will see lot of those.
Relate Eclipse shortcuts and tutorials from Javarevisited Blog
- Read / Write Excel file in Java using Apache POI
Read / Write Excel file in Java using Apache POI 2014-04-18 BY DINESH LEAVE A COMMENT About a year o ...
- 出现错误:Unable to load configuration. - action - file:/E:/Java/Tomcat7.0/apache-tomcat-7.0.68-windows-x64/apache-tomcat-7.0.68/webapps/SSH2Integrate/WEB-INF/classes/struts.xml:8:43
严重: Exception starting filter struts2 Unable to load configuration. - action - file:/E:/Java/Tomcat7 ...
- How to Read, Write XLSX File in Java - Apach POI Example---reference
No matter how Microsoft is doing in comparison with Google, Microsoft Office is still the most used ...
- [Java] Create File with java.io.File class
Create a file with some content in some specific location. The reference is here. /** * Write fileCo ...
- android studio# jdk8# class file for java.lang.invoke.MethodType not found
https://github.com/evant/gradle-retrolambda/issues/23 class file for java.lang.invoke.MethodType not ...
- Apache POI – Reading and Writing Excel file in Java
来源于:https://www.mkyong.com/java/apache-poi-reading-and-writing-excel-file-in-java/ In this article, ...
- [Training Video - 6] [File Reading] [Java] Create and Write Excel File Using Apache POI API
package com.file.properties; import java.io.File; import java.io.FileNotFoundException; import java. ...
- The project was not built since its build path is incomplete. Cannot find the class file for java.lang.Object
The project was not built since its build path is incomplete. Cannot find the class file for java.la ...
- JAVA Error:The project was not built since its build path is incomplete. Cannot find the class file for java.util.Map$Entry.....
今天,学习Netty框架时遇到error:Description Resource Path Location Type:The project was not built since its bui ...
随机推荐
- Spark源码阅读@ListenerBus 的实现
- BZOJ 1734: [Usaco2005 feb]Aggressive cows 愤怒的牛( 二分答案 )
最小最大...又是经典的二分答案做法.. -------------------------------------------------------------------------- #inc ...
- Linux下通过rm -f删除大量文件时提示"-bash: /bin/rm: Argument list too long"的解决方法
Linux下通过rm -f删除/var/spool/postfix/maildrop/中大量的小文件时提示: "-bash: /bin/rm: Argument list too long& ...
- PHP学习笔记2-流程控制
条件控制:if <?php function getLevel($score){ if($score>=90){ return "优秀"; }elseif($score ...
- 使用 getopt() 进行命令行处理
引言 在早期的 UNIX® 中,其命令行环境(当时的唯一用户界面)包含着数十种小的文本处理工具.这些工具非常小,通常可很好地完成一项工作.这些工具通过较长的命令管道链接在一起,前面的程序将其输出传递给 ...
- Python基础1:一些小知识汇总
一.#!usr/bin/env python 脚本语言的第一行,指定执行脚本的解释器. #!/usr/bin/python 是告诉操作系统执行这个脚本的时候,调用/usr/bin下的python解释器 ...
- Windows服务编程集合
http://zyan.cc/windows_mstsc/ Optionname--Optionvalues描述 type=----own, share, interact, kernel, file ...
- C++标准库类型vector及迭代器iterator简介
Vector是C++标准库类型,称为容器,一个容器中的所有对象必须是同一种类型的.与数组相比,其最大的优点就是动态增长.Vector是一个类模板,并不是数据类型,而vector<int>和 ...
- pomelo 协议
分析的是hybridconnector,使用的chatofpomelo-websocket(pomelo为0.7.0) 參考:https://github.com/NetEase/pomelo/wik ...
- ACM比赛(进制转换)
Time Limit:1000MS Memory Limit:131072KB 64bit IO Format:%lld & %llu Description 把十进制整数转换 ...