前几天一个没有源代码的java项目出了一个问题,有一个功能无法正常使用。
通过查看Tomcat的异常日志,定位到了一个.class文件里面的方法,于是就想着将其反编译成.java文件,改完之后再编译成.class文件替换回去。
反编译使用的jadx工具,不在这里赘述。
但是改完之后,用javac生成.class文件时,一直不成功,报出很多错误,找不到这个包那个包的。
在网上找了一圈,对于jar包,将其放入jre\lib\ext目录之后,编译没出错了。
但是,那个java文件本身还引用了一些.class文件,一直无法通过编译,尝试了各种网上找的办法,比如将.class放到jdk的bin目录,比如把java文件放到.class文件一起,比如环境变量里面将classpath设为.class文件的目录,均无法成功。
最后,还是在网上找到了一个方法,终于成功了。
首先,将.class文件按其包的名称建一个层级目录,比如.class的package是com.a.b.c,那么就建4层目录com\a\b\c,将.class文件放到c里面,com目录放在D:\java\下,然后,在cmd中执行如下命令:
javac a.java -cp "D:\java\"
就可以成功生成了。
另外,需要特别注意的是,如果是在服务器上进行生成操作,那么ext目录下的jar包在生成完后,记得立刻删除,否则重启Tomcat之后,它会优先使用ext目录下的jar包,然后你的整个网站就等着报404错误吧。