手动实现第三方jar包修改并重新打包
Posted Java-桃子
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了手动实现第三方jar包修改并重新打包相关的知识,希望对你有一定的参考价值。
前言
开发过程中,项目中总会引入一些第三方依赖包,以便通过直接调用jar包中的方法来完成某些实际业务。但是有时候jar包中封装的方法可能跟我们的实际需求有些出入,需要修改业务逻辑后重新打包才能使用,但是jar包可能不像普通的maven项目那样导入idea等工具修改然后直接利用maven命令来完成,很多时候需要安装一些反编译工具才能打开,且不能在反编译工具中直接修改。本文主要针对jar包中的文件类型,从两种方式实现jar包中文件的替换及生成class字节码文件。
背景
最近业务需要,项目中需要实现文件预览功能,由于使用的是kkFileView第三方jar包,有些业务需要自己调整,然后使用新生成的jar包进行部署。结合自己的实际项目情况,根据jar包要修改的文件类型,本文主要介绍两种文件类型实现方式:一种是替换jar包中的非java类型文件,即不需要生成class字节码的文件,比如ftl后缀的文件,另一种是需要生成class字节码的文件,比如entity、service、controller等类型文件。话不多说,请参考操作流程。
操作流程
1.不需要生成字节码文件的jar包修改方式
如图:第一步:找到要修改的jar包,右键选择打开方式,然后选择反编译插件jd-gui(该应用程序需自己安装),打开后,找到对应的ftl文件,双击打开,然后ctrl+c复制文件中的内容,粘贴到notepad软件中,修改对应的内容后另存到自己指定的目录下(注意:名称要与原文件名保持一致)
第二步:找到刚才的jar包,右键选择打开方式,然后选择7.zip或者WinRAR压缩工具打开,然后找到被修改文件的位置,将第一步中的文件拖拽进去替换掉即可
第三步:运行jar包,程序调用jar中的方法,查看运行效果
修改前:
修改后:
此时预览报错页面下方的对应的jar中的官方QQ群信息已删除,目的达到。
2.需要生成字节码文件的jar包修改方式
如图:我现在要修改实体类对应的文件,添加一个新属性,该怎么做呢?
第一步:同上,找到要修改的jar包,右键选择打开方式,然后选择反编译插件jd-gui(该应用程序需自己安装),打开后,找到对应的文件,双击打开,然后ctrl+c复制文件中的内容,粘贴到notepad软件中,修改对应的内容后另存jar包所在的同级目录下(注意:名称要与原文件名保持一致,尽量在同级目录下,便于后续使用javac命令生成calss文件),此处仅测试使用,添加一个新属性即可,如图
第二步:由于springboot项目中有些文件有依赖关系,使用javac命令生成字节码文件时可能会包程序包找不到(比如cn.keking.config包不存在),所以此处在项目中随便找一个jar包(如filters-2.0.235.jar),和要修改的jar包(如kkFileView-3.6.0.jar)放在同一个目录下,然后使用7.zip压缩工具分别打开两个jar包文件,删除第一个jar包中的所有文件,然后使用复制或拖拽的方式将第二个jar包中的将要修改的目录(比如cn目录)下的文件复制到另一个jar包中,如图
第三步:然后在jar包所在目录的上方,输入cmd命令,回车,进入命令行模式,如图
第四步: 弹框中执行如下命令:代码如下
javac -cp C:\\Users\\rongke\\Desktop\\test\\filters-2.0.235.jar C:\\Users\\rongke\\Desktop\\test\\FileAttribute.java
如图
回车,即可看到生成了class字节码文件,并且内容发生了改变,如图
此时想必大家应该知道接下来的操作流程了吧,使用7.zip方式打开kkFileView-3.6.0.jar,找到字节码文件所在的指定位置,然后将新的class文件拖拽替换掉原来的class字节码文件即可。
好了,今天的分享就到这里,如果对你有所帮助的话,记得给小编点赞哦!如果您有更好的实现方式,也可以下方评论留言,一起探讨!
以上是关于手动实现第三方jar包修改并重新打包的主要内容,如果未能解决你的问题,请参考以下文章
1、2个jar包相互引用,修改了其中一个jar重新打包,另外一个需要重新打包吗?需要的话,jdk那些版本需要呢
Android 逆向修改 Android 的 apk 安装包内的文件并重新打包 ( apktool_2.6.0.jar 下载和使用 | zipalign 文件对齐 | apksigner 签名 )