您的位置:首页 > 编程语言 > Java开发

jd-gui反编译全过程,myeclipse中java web项目jar包没有红叉仍然显示感叹号,运行main函数提示errors exist in required project(s)

2016-09-02 11:11 1486 查看

背景

这两天java反编译了一个java web老项目,只需要修改里边一小段代码,并重新编译,但过程中出现了简单但又令人费解的问题。

1.使用jd-gui.exe打开jar包(.war包直接改后缀名为.jar)



图中显示,将RdqueryAction.class反编译出下结果,注意这是编译最终结果RdqueryAction.java的预览,不能在这里修改RdqueryAction.class文件,不然要反编译干嘛。

2.关于内部类



图中classA$classB格式的反编译java文件其实是指:classB是classA的内部类,如果一个个把内部类填到主类去会特别麻烦。

解决办法:



直接用360压缩软件解压ROOT.jar,然后用jd-gui.exe,快捷键CTRL+O,打开刚才这个classA主类,于是看到那些内部类都已经集成在主类了,而不会classA$classB形式分开。

3.导出编译结果



4.在eclipse新建java web项目,把反编译出的目录(com下)拷到src里,并且把lib里库文件拷到WEB-INF下,然后项目右键-Buid Path - configure Buid Path..-Add Library..-选择Web App Libraries..



正题



如图,Libraries处没有显示红叉,不缺任何jar报,不存在任何引用jar包错误问题,但是就是会显示感叹号



如图,运行一个简单的helloworld测试类都报错,

提示:errors exist in required project(s),

提示:错误: 找不到或无法加载主类 Test

同样的测试类我在其他项目运行时没有问题的。

分析

出现感叹号说明在jar包引用上一定有问题,但找不到问题所在。简单的测试类出错原因是所在项目运行出错,但是有src下的包都没有红叉,说明还是感叹号的问题。

解决

经过漫长无意义的反反复复检查后,无意中发现myeclipse新建web项目中自带的javaEE6.0库里有javax.xx.jar,而lib包下面也有javax.jar





于是我把lib下的javax.jar删除,刷新项目,就没有感叹号了!

总结

myeclipse自带的包和用户引用的包冲突时也会出错,显示感叹号!不只是缺少jar包才会出现感叹号。

后续

继续反编译,我需要更改RdqueryDaoJdbc类里某一段代码,更改好之后,就在main函数运行实例化,就能编译RdqueryDaoJdbc.java,并在文件夹WEB-INF/class下相对应目录下找到RdqueryDaoJdbc.class文件。





将该文件RdqueryDaoJdbc.class替换原ROOT.jar的解压包相对应目录下的原RdqueryDaoJdbc.class,完成了编译文件的修改,最后用360压缩把ROOT文件夹重新压缩成.zip格式的压缩包,把后缀名改成.war或.jar即可。

这样整个反编译-修改代码-重新编译-打包的过程就完成了!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐