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即可。
这样整个反编译-修改代码-重新编译-打包的过程就完成了!
相关文章推荐
- eclpse运行项目出现errors exist in required project(s)
- Myeclipse项目通过built Path添加Jar包,运行仍然提示没有**.jar
- Android Studio 中的类文件前标识图标显示为 j 而不是C,代码的左边没有了颜色显示,布局文件的引用也没有蓝色显示,代码大部分变成了白色。项目能正常编译运行,且敲代码时也没有了提示的问题
- Myeclipse导入项目提示已存在(Some projects cannot be imported because they already exist in the workspace)
- 一、问题 MyEclipse怎么导出可运行的jar包。 二、测试环境 MyEclipse V8.6 三、操作过程 1、java项目没有导入第三方jar包的情况 这时候打包就比较简单: ①首先在MyE
- Myeclipse导入项目提示已存在(Some projects cannot be imported because they already exist in the workspace)
- Java GUI项目读取Jar内部外部文件 打包EXE 在没有java环境的电脑上可运行
- eclipse导入项目提示已存在(Some projects cannot be imported because they already exist in the workspace)
- 解决Eclipse导入项目是提示错误:Some projects cannot be imported because they already exist in the workspace
- Maven 项目生成jar运行时提示“没有主清单属性”
- MyEclipse 中添加工程显示Some projects cannot be imported because they already exist in the workspace
- 解决Eclipse导入项目是提示错误:Some projects cannot be imported because they already exist in the workspace
- Android开发:编译运行提示Your project contains errors...
- Visual Studio 2010 发布Web项目提示The target "PipelinePreDeployCopyAllFilesToOneFolder" does not exist in the project.解决方法
- Myeclipse导入项目报错:Some projects cannot be imported because they already exist in the workspace
- Myeclipse 14 导入外部项目时:Some projects cannot be imported because they already exist in the workspace
- 不小心把JRE System Library中的某些Jar包删除了,运行Java程序提示找不到类,并且在项目的头上出现红色的感叹号
- Android开发:编译运行提示"Your project contains errors..."
- eclipse导入项目提示已存在(Some projects cannot be imported because they already exist in the workspace)
- maven项目导入后有感叹号,但bulid path中没有显示缺少哪个jar包