修改jar包的class文件,如何直接替换jar包里的class文件
00-1010反编译jar包,修改类文件。重新打包解决方案。反编译jar包后,修改源代码,重新编译。1.场景二。详细步骤
00-1010这两天遇到一个需求:需要修改一个jar包中的逻辑代码,重新打包。
本来是个简单的问题,但是因为这个jar包不是可执行的jar包(没有main方法入口),所以反编译后jar无法被idea重新打包,因为jar是混乱的。
所以花了一些时间写在这里。
目录
反编译jar包
首先,用一些像jad-gui这样的反编译工具将项目反编译成java包。
示例jar包并没有真正被企业使用,而只是一个博客演示。假设这个包叫做demo.jar
此时,您可以将其导出为java文件。
用javac 编译成class文件
注意这里很容易出错,因为当前的java文件可能有一些依赖于其他jar包的代码,需要一个一个的引入。
#最后,必须以:结尾#如果有编译问题,可以尝试-xlint3360 unchecked。这个参数javac-classpathdemo.jar3360依赖于jar包路径13360依赖于jar包路径23360。Demo.class此时会在当前运行目录下生成Demo.class。
此时,目录结构如下(请忽略与上图中jad-gui的不匹配)
-演示元信息清单。打jar包
#运行在演示文件夹下#这是最后一个。表示当前目录jarcvfmdemo . jar meta-INF/manifest . MF中的所有文件,完成了:
反编译jar包并修改class文件重新打包
00-1010当前jar包函数需要修改,但是没有源代码。
两种方式:
通过反编译JD-GUI等软件或IDEA等Java开发常用的其他ide检查源代码,新建一个项目,按照文件结构将文件源代码一个一个复制粘贴到项目中,然后根据个人需求进行修改编译。通过反编译软件JD-GUI,直接以源代码格式保存到一个项目文件中,然后通过IDEA打开项目,进行必要的配置后,根据需求进行修改和编译。显然,第一种方法比较费时,所以选择第二种方法。
解决思路
2.1 查看源码
如果只是查看源代码,有两种方法:
方法1:
直接通过jd-gui打开jar文件。
方法二:
通过IDEA的外部库进行检查。在IDEA中,通过项目结构将要查看的jar包添加到库中,然后就可以查看了。
虽然第二种方法有点麻烦,但是如果只是看源代码的话,我还是比较喜欢第二种方法。
2.2生成源文件
有了jd-gui,可以直接生成**。java**源文件。您可以通过菜单File-Save All Sources生成压缩源文件。
注意:生成的源代码文件中有一些多余的注释,比如行号和一些元数据信息,可以通过修改jd-gui的preference设置重新生成。
2.3 构建项目
直接通过IDEA打开源文件;
创建src目录,将源文件方法下载到src,根据错误信息修改项目的外部引用;
2.4 编译成jar包
有两种类型可供选择:Empty可以设置无主类,适合编译无主类的jar包;
以上个人经验,希望能给大家一个参考,也希望大家能支持盛行的IT。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。