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

news2024/9/24 13:26:07

简单的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不太好还原,暂时无法处理,如有可以处理的方法希望评论区告知。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2081105.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Python中PDF文件的编辑与创建

目录 安装必要的库 编辑现有PDF文件 合并PDF文件 拆分PDF文件 添加水印 注意 创建新的PDF文件 使用reportlab创建PDF 使用Spire.PDF for Python创建PDF 结论 在数字化办公和学习环境中,PDF(Portable Document Format)文件因其跨平台…

【免费分享】1982-2015华北平原农田蒸散发数据集

华北平原是中国最重要的产粮基地之一,然而该地区水资源缺乏、供需矛盾突出。 在全球气候变化及用水需求日益增加的背景下, 该地区水循环过程变得愈加脆弱。 因此如何准确估算蒸散发、 掌握蒸散发的时空变化规律, 进而合理配置水资源、提高农业…

Lua收集请求日志

Kafka搭建 单机版的kafka搭建非常简单,不过我们今天采用Docker搭建kafka。Kafka使用Zookeeper存储Consumer、Broker信息,安装kafak的时候,需要先安装Zookeeper。 Zookeeper安装: docker run -d --name zookeeper -p 3181:3181 …

《网络安全自学指南》

《网络安全自学教程》 《网络安全自学》 1、网络协议安全1.1、OSI七层模型1.2、TCP/IP协议栈1.3、Wireshark使用1.4、802.1x协议1.5、ARP协议1.6、ARP欺骗1.7、IP协议1.8、ICMP协议1.9、TCP协议1.10、SYN Flood1.11、SSL协议1.12、HTTP协议1.13、DHCP协议 2、操作系统安全2.1、…

<数据集>TACO垃圾识别数据集<目标检测>

数据集格式:VOCYOLO格式 图片数量:6004张 标注数量(xml文件个数):6004 标注数量(txt文件个数):6004 标注类别数:18 标注类别名称:[Crankshaft, Centrifugal_body, Washer_container, Circlip_containe…

保存和加载工作区变量

目录 保存工作区变量 加载工作区变量 查看 MAT 文件的内容 在 MATLAB 会话之间并不保留工作区。退出 MATLAB 时,工作区清除。但是,您可以将当前工作区中的任何或所有变量保存到 MAT 文件(.mat)中。之后,只需加载保存的 MAT 文件&#xff0…

工业设备定位激光器在工业领域的应用

在日新月异的工业制造领域,技术的每一次飞跃都深刻影响着生产效率和产品质量的双重提升。其中,工业设备定位激光器作为现代工业自动化的核心元件之一,正以其高精度、高效率和广泛的应用范围,引领着制造业的智能化转型。接下来给大…

<PLC><算法>使用汇川eazy521系列PLC,如何使用LiteST语言对乱序数组进行排序?(冒泡法)

前言 本系列是关于PLC相关的博文,包括PLC编程、PLC与上位机通讯、PLC与下位驱动、仪器仪表等通讯、PLC指令解析等相关内容。 PLC品牌包括但不限于西门子、三菱等国外品牌,汇川、信捷等国内品牌。 除了PLC为主要内容外,PLC相关元器件如触摸屏…

NS4054H 40V 高耐压线性锂离子电池充电管理 IC

1 特性  最大输入电压: 40V  输入过压保护电压: 6V  内置输入过流保护: 1A  支持 0V 电池电压充电  充电电流可编程  4.2V 充电浮充阈值电压  电池待机电流< 1uA  内置 C/10 充满截止功能 …

数据结构-manacher算法

第一种情况: 以t为中心,他的回文串为abedeks, 同时i’的回文为ede,那么i的回文也是ede。 第二种情况:以s为中心的回文串为 tabkdedk,而以i’为中心的回文串为abkde,已不再L和R之间。此时以i为中心的回文串就为kdedk. 第三种情况: 以t为中心…

书生大模型实战营第三期基础岛第六课——OpenCompass 评测 InternLM-1.8B 实践

OpenCompass 评测 InternLM-1.8B 实践 基础作业:创建虚拟环境下载并安装opencompass安装相关依赖复制测评数据集到当前目录下并解压测评前环境变量配置使用命令行配置参数法进行评测 基础作业: 使用 OpenCompass 评测 internlm2-chat-1.8b 模型在 ceval 数据集上的性能&#x…

强化学习,第 4 部分:蒙特卡洛控制

目录 一、介绍 1.1 强化学习 2.1 关于此文章 三、ε贪婪策略 四、蒙特卡洛控制 4.1 基本原理 4.2 举个例子 五、On-policy & off-policy 方法 六、重要性采样 6.1 赋予动机 6.2 想法 6.3 应用 七、增量实施 7.1 增量的理论 7.2 常α MC 八、结论 一、介绍 …

Livekit本地部署Egress录制服务

Livekit本地部署Egress录制服务 Egress官方推荐使用Docker方式部署。官方文档 创建Egress配置文件 新建config文件 vim config.yamlconfig.yaml文件内容 log_level: debug# api_key 参考livekit 部署 配置的 api_key: 2yJimTMFeF9h15PHEv api_secret: Mvi9ZgqGJ3LqwEAcTV…

项目管理的七大核心要素

项目管理不仅涉及一系列复杂的活动,还涵盖了多个关键要素,这些要素相互交织,共同构成了项目成功的基石。 项目管理七大要素: 1、明确的项目目标: 项目管理的起点是确立清晰、具体、可衡量的项目目标。这些目标不仅为…

新手网络爬虫利器介绍 之 移动蜂窝网络代理

移动蜂窝代理对接说明 在爬虫与反爬虫斗争愈演愈烈的情况下,各大网站和 App 的风控检测越来越强,其中一项就是 IP 封禁。 为了解决 IP 封禁的困扰,一个有效的方式就是设置代理,设置代理之后,爬虫可以借助代理的 IP 来…

IntelliJ IDEA 自定义字体大小

常用编程软件自定义字体大全首页 文章目录 前言具体操作1. 打开设置对话框2. 设置编辑器字体3. 设置编译软件整体字体 前言 IntelliJ IDEA 自定义字体大小,统一设置为 JetBrains Mono 具体操作 【File】>【Settings...】>【Editor】>【Font】 统一设置…

关于git报错please clean your repository working tree

在vscode中使用git拉取代码提示:在签出前,请清理存储库工作树。有时候在写代码前未更新远程代码,会出现代码冲突。 1.git stash 先将本地修改存储在暂存区2.git pull 拉取远程代码3.git stash pop 释放暂存区内容

书生大模型实战营-进阶关卡-6-MindSearch 快速部署

任务:将 MindSearch 部署到 HuggingFace 教程:https://github.com/InternLM/Tutorial/blob/camp3/docs/L2/MindSearch/readme_github.md 环境配置 打开codespace主页https://github.com/codespacescodespace主页,选择blank template。 新…

turtlebot 测试 Gazebo Harmonic ROS Jazzy

源码移植后理论上支持所有Gazebo和ROS版本,但花费时间较多。 只推荐学习Gazebo 经典版和Gazebo Harmonic以及之后版本。 在中间的过渡版本,不推荐学习。 Gazebo经典版包括Gazebo 7 Gazebo 9 Gazebo 11。 Gazebo Harmonic 和 ROS2 jazzy 安装和测试-CSDN博…

核心数据加密的实现方式

核心数据加密是保护企业敏感数据和技术机密的重要手段,它通过加密算法和密钥将明文数据转换为难以解读的密文,以防止数据在存储、传输或使用过程中被未授权访问或泄露。以下是对核心数据加密的详细解析: 一、核心数据加密的重要性 在数字化时…