概述
- 前几天有个java项目,由于没有了源代码,只剩下一个tomcat下的一个webapp应用程序,需要对其中的某个servlet类进行修改,并且重新编译为class文件,进行故障排错和修改。
原理
- 众所周知,java工程编译的class文件,目前很容易就可以被反编译为源文件并且进行修改。此次是一个web工程,但其实我不需要重新去建立一个web工程,我只需要找到相应的类,并且反编译为java文件,进行修改后,再进一步编译为java类
工具
- 反编译工具用到了jd-gui,这个工具可以将一个class反编译为java文件,并支持将全部资源进行导出,从而可以得到一个完整的源代码。

- 再解压缩这个包,即可得到项目工程的源代码
-
编译命令
- 项目是有包层级的,以及引入了其他外部的包,所以需要使用CLASSPATH环境变量,将所需的jar包引入进来。
- 我这边做法是将项目所有可能用到的包都放在了一个路径下,包括tomcat的lib以及项目本身的lib,再通过一个for循环,将所有的jar包路径追加再CLASSPATH环境变量中。
for jar in /root/apache-tomcat-7.0.103/lib/*.jar; do CLASSPATH=$CLASSPATH:$jar; done
export CLASSPATH
- 编译时,指定一个java源代码路径SOURCEPATH变量,这个变量指向源代码的最外面的一个层级,确保没有报一些引入包或者类不存在的错误,其他的一些就需要根据错误慢慢的进行调整即可。