简单的jar包解压class文件修改再编译成jar包

简单的jar包解压class文件修改再编译成jar包

1. 需求

我们公司有一个项目演示的环境,这个环境是我们公司其他组的项目,我们组只有这个项目的前端,jar,以及部分数据库结构表信息,现在我们已经启动服务可以正常访问,但是发起业务的时候发现,有很多接口需要调用外围接口,比如调用esb系统,调用行内核心系统等,现在要将此部分进行注释才能进行后续调用,此处使用idea工具进行操作,此处记录一下,方便后续如果要修改简单类方便查询。

2.具体实现过程

我们操作的过程主要还是分为三个步骤,需要解压原有包,修改文件再编译等,具体实现过程如下所示

2.1 解压原有包信息

我们使用java原生工具类jar命令解压clm.jar,获取到解压后的文件夹
在这里插入图片描述
解压后的文件目录,我们要修改的文件是clm-giving-credit-1.0.1.RELEASE.jar中的文件,具体的目录位置为\BOOT-INF\lib中,具体的修改文件为 org.git.gr.modules.clm.controller.company.CompanyApplyController
在这里插入图片描述
在这里插入图片描述

2.2 配置重写class环境

我们需要将解压后的全部包都导入到idea中,配置好maven信息,然后将clm.jar解压的\BOOT-INF\lib中的jar导入到项目中,具体步骤如下:

  • 新增一个maven项目
    在这里插入图片描述
    项目类型选择maven类型,然后点击next
    在这里插入图片描述
    对maven项目设定名字路径以及坐标信息
    在这里插入图片描述
    之后获得一个空的maven项目
    在这里插入图片描述
    配置项目的maven信息
    在这里插入图片描述

我们开始添加之前clm.jar解压后的全部jia包,既\BOOT-INF\lib中的全部jar
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
观察jar包是否已经全部导入,然后再顺手配置一下jdk版本信息为自己需要的版本,我们使用的是1.8版本
在这里插入图片描述
在这里插入图片描述

2.3 重写class文件

我们需要重写一个与要修改的 org.git.gr.modules.clm.controller.company.CompanyApplyController,同名同目录的一个类文件
在这里插入图片描述
然后使用java-decompiler反编译工具找到对应类,复制里面的内容信息到自己新增的类中
在这里插入图片描述
然后找到自己要修改的方法进行注释或者修改
在这里插入图片描述
修改之后使用Build Module 进行重新编译,然后在编译后的target中可以获取到编译后的class文件
在这里插入图片描述
在这里插入图片描述

2.4 替换编译后的class文件

我们使用新编译的CompanyApplyController.class替换掉clm-giving-credit-1.0.1.RELEASE.jar中的CompanyApplyController.class,我们使用360解压缩工具直接复制替换即可
在这里插入图片描述

2.5 重新编译clm.jar

我们上面已经获取到了修改之后的clm-giving-credit-1.0.1.RELEASE.jar了,我们现在可以将修改后的clm-giving-credit-1.0.1.RELEASE.jar重新替换回clm.jar即可。我们使用jar -uvf0命令更新指定jar包内容

jar -uvf0 clm.jar .\BOOT-INF\lib\clm-giving-credit-1.0.1.RELEASE.jar

观察到此信息既表明jar包已经更新
在这里插入图片描述
如果不放心可以进入到clm.jar中的clm-giving-credit-1.0.1.RELEASE.jar包中查看信息是否已经修改,如下图所示,代码已经修改
在这里插入图片描述
至此,我们完成了class文件的反编译修改再次编译成jar的过程,这个过程中也有其他问题尚未解决,我这个编辑的类是相对简单的类,我发现有很多类比较复杂实现了多个接口,还有很多内部类,这样会导致一个java文件编译之后形成多个class文件,这样的情况就需要根据多个class类还原java文件详细信息了,这样的情况编译后的class不太好还原,暂时无法处理,如有可以处理的方法希望评论区告知。

  • 22
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值