对原jar包解压后修改原class文件后重新打包为jar

使用idea修改jar包源码并重新打包 本文主要介绍了使用idea修改jar包源码并重新打包,希望能对学习Java的同学们有所帮助。 文章目录 1. 步骤一 2. 步骤二 3. 步骤三 4. 步骤四 5. 步骤五 6. 步骤六 7. 步骤七和八 8. 步骤九和十 阅读详情

背景

在新代码中调用的高版本方法但是依赖的历史版本用的低版本,存在调用方法不存在,有可能你编译时通过,但是调用时发现JVM依赖的版本是旧版本,导致调用的新版方法发生异常。例如我下面的这个异常,那么我们就需要调和这种依赖冲突。

java.lang.NoSuchMethodError: 'java.lang.reflect.Field[] org.apache.commons.lang3.reflect.FieldUtils.getAllFields(java.lang.Class)
'
xxxx.core.domain.SplitFields(25)

这种情况通常是我们依赖第三方jar,或者其他团队提供的jar,自身没有源码,或者自己的历史版本源码实在不想动了。

或者我们希望在现有的jar中添加自己的方法,或者修改现有jar中的依赖启动项目,比如历史jar依赖的当前运行环境中的resource中的配置文件,或者特定的文件路径比如d//config,这种如果在centos环境,或者在docer环境根本就无法加载到这些文件路径。因此需要我们手动修改源文件,但是有没有源码的情况下的不得已而为之。

三种修改方式

1.POM中移除原jar中依赖的历史版本

如果原jar使用的pom.xml依赖我们可以使用exclusions排除该依赖,当然也就不需要我们这里提到的修改原jar了

<dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
            <exclusions>
                <exclusion>
                    <groupId>com.netflix.ribbon</groupId>
                    <artifactId>ribbon</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

2.原jar它不使用pom依赖而是直接放在源码中再编译

这种情况使用上面的排除是没办法的,如下图,org.apache.commons.lang3的源码它给直接合到它的项目中了,而不是使用的依赖pom加载,这种方式,你只能通过本文的方式手工清理这种强依赖。

在这里插入图片描述
方法如下:

  1. 使用rar解压工具打开文件,找到对应的org.apache.commons.lang3,直接删除即可
    在这里插入图片描述

  2. 切换到META-INF\maven下找到
    找到对应的commons-lang3直接删除
    在这里插入图片描述

如此重新添加到仓库中或者放入项目的lib下面即可解除旧版本的依赖

使用JarEditor 插件对源码进行修改(推荐)

它让你无需再用其他第三方工具,也无需解压 JAR 文件就能直接在IDEA中编辑其中的类和资源文件。还能用它轻松添加、删除或重命名 JAR 包里的文件。即使遇到混淆过的 JAR,JarEditor 也能通过 Javassist 工具搞定

JarEditor 提供了丰富的功能,尤其是对于开发者日常操作 JAR 文件时非常有用的特性:

  • 直接编辑 JAR 包内的类和资源文件:无需将 JAR 文件解压缩,支持对其中的类(.class 文件)和资源文件直接进行编辑。
  • 添加、删除或重命名 JAR 包内的文件和文件夹:简化了对 JAR 包内容的管理。
  • 搜索 JAR 包的内容:通过关键字快速定位 JAR 包中的文件或类。
  • JAR 内部文件的复制与粘贴:支持将 JAR 包中的文件复制到外部剪贴板,也支持从剪贴板粘贴文件到 JAR 包内。
  • 支持 SpringBoot JAR:可以处理 SpringBoot 打包的 JAR 文件。
  • 支持 Kotlin:除了 Java,JarEditor 也支持 Kotlin 的类和文件操作。
  • 导出 source JAR:可以直接将 JAR 文件的源码导出为 source JAR。
  • 字节码修改工具:通过集成的 Javassist 工具,支持直接修改 .class 文件的字节码。
    在这里插入图片描述

IDE安装完 JarEditor插件后,右键点击项目依赖jar中对应的的 .class 文件,在反编译界面可以切换到 JarEditor 的 tab 页面,方便对 JAR 文件进行编辑。

  1. pom加载jar : pom中依赖的jar
  2. 磁盘加载jar: 对于外部 JAR 文件,可以通过 File -> Project Structure -> Libraries -> Add Library 来添加外部 JAR,并在项目视图中对其进行反编译和编辑操作

如下图我对我遇到的依赖jar中的旧版本代码进行修改增加新版本中新的方法如下图

保存修改后的文件方式:

1.保存源码:保存文件到jar对应磁盘同级别目录下的反编译源码;target选择JDK版本8即可->save
2.保存编译后的文件重新打包为jar:target选择JDK版本8->Build jar ;

编译后这个jar就是我们引入的jar会被覆盖,编译完我们就可以直接把这个jar传到私有仓库方便下次使用

保存后我们关闭编辑页面,重新双击打开jar中的FieldUtils我们可以看到它已经有我们上面添加的方法代码块了。

在这里插入图片描述

请看演示动画[下图动画来自引用文章]
在这里插入图片描述

使用java-decompiler反编译后修改源码覆盖原class(不好用-不推荐直接跳过)

以上都不行那就只能修改原class了,比如写死的加载路径,或者已经无法再外面满足的配置文件地址等等。

jar解压jar拿到源class先看通用命令

#解压当前文件到当前目录
 jar -xvf .\MQSDK1.6.1.jar
  #重新压缩当前路径下的所有文件为 MQSDK1.6.1.jar
 jar cvfM0 MQSDK1.6.1.jar ./*

比如这里我们看到了,需要修改这个代码rg.git.gr.modules.clm.controller.company.CompanyApplyController

首先创建或者直接使用现有的项目,在src下面新建一个同名同目录的类文件org.git.gr.modules.clm.controller.company.CompanyApplyController目的是编译后后它的包路径和文件名方法名依然和原来一样,不会造成代码冲突和异常
在这里插入图片描述

然后使用java-decompiler反编译工具找到原jar解压路径种对应类,复制里面的内容信息到自己新增的类中,修改新类的源码后重新编译,使用编译后的class文件覆盖原解压的jar中的对应文件。

提醒

以上修改原jar的方式,如果使用的pom加载记得都要修改版本号后提交到仓库中,不然下次拉取可能还是原来的版本内容。

如果使用 外部加载lib的方式则保留好修改后的jar资源就可以了。

参考资料-推荐阅读拓展

告别繁琐反编译:IDEA中轻松反编译与修改Jar包
https://datamining.blog.youkuaiyun.com/article/details/142311328

Sigrity SPEED2000 TDR TDT Simulation模式如何进行时域阻抗仿真分析操作指导-差分信号 Sigrity SPEED2000 TDR TDT Simulation模式如何进行时域阻抗仿真分析操作指导-单端信号详细介绍了单端信号如何进行TDR仿真分析,下面介绍如何对差分信号进行TDR分析,还是以下图为例进行分析。Impedance是时域阻抗曲线,也是最主要的观测指标,注意:impedance曲线的时间刻度不是延时,延时=时间刻度/2,因为TDR测量的是用一来一回的原理去测量的。Use Lossy peeling 默认不勾选,勾选的话代表同时仿真无损和有损方案,不勾选代表仅仿真有损方案。 阅读详情

相关推荐

56-FMC连接器电路设计

FMC连接器电路设计

weixin_66510961的博客 4721

反编译jar包,修改后重新编译为jar包

使用开源jar包或者供应商jar包时,会发现一些bug或者已有功能无法满足我们要求,需要对jar中的.class文件进行修改。处理步骤如下所示: 1.使用反编译工具将jar包反编译为源文件 反编译工具请参考XJAD2.2版下载地址:http://www.blogjava.net/Files/96sd2/XJad2.2.rar 如果只是少量的几个class需要修改,可以直接用IDEA或者jd-gui工具打开,将.class文件中的内容直接复制并创建同名的.java文件(需要根据jar包中建立所有的上层目

lgq2016的博客 8213

cartographer基于3d地图的纯定位模式

关于纯定位模式呢,本人试过2d和3d,怎么说呢,有条件的话,建议直接上3d,因为博主当初在做定位时针对室内和室外都尝试过,2d只在室内环境下效果会很棒,但是在室外就呵呵啦!所以这里直接讲解3d室外定位(建图篇请自己查看我之前的博客:[3d建图](https://blog.youkuaiyun.com/qq_40216084/article/details/105531983) 看了我之前的博客大概知道配置文件和源文件路径了,我这里就不把路径写出来了,挺麻烦的。直接讲怎么做把,有不懂的留言,看到了我一定知无不言。 **首

qq_40216084的博客 5552

jar包反编译,修改后再编译成jar包

1.jar包解压,将.jar改成.zip即可 2.jar包反编译,用jd-gui反编译,得到.java文件 3.创建java工程,将2反编译后的整个目录拖到创建的src目录下 4.修改你需要修改的.java文件 5.Export,选中你需要导出的.java文件(多个一起导出也可以),执行Export,得到新的jar包,名字自定义即可。比如update.jar 6.解压更改后的jar包,如

yuxikuo_1的专栏 5734

从原理到应用:深入解析双编码器在机器人关节力矩感知中的实现

本文深入解析了双编码器方案在机器人关节力矩感知中的实现原理与应用。该方案通过在电机侧和输出侧分别安装编码器,利用两者位置差异间接高精度计算外力,克服了传统电流环精度不足和扭矩传感器成本高昂的缺点。它为实现协作机器人的丝滑拖动示教、灵敏碰撞检测以及足式机器人的动态平衡与柔顺控制提供了关键技术支撑,是目前高性能机器人力控的主流选择。

t8u9v0w1x的博客 658

C#实战:5分钟搞定Modbus RTU通讯(基于NModbus4库)

本文详细介绍了如何使用C#和NModbus4库快速实现Modbus RTU通讯,包括环境配置、核心功能实现、性能优化及常见问题排查。通过代码示例和实用技巧,帮助开发者高效完成工业自动化设备的数据采集与控制任务。

weixin_30689307的博客 467

部署实战--修改jar中的文件并重新打包成jar文件

只有两个jar包,从一个jar里找出要修改的class文件生成新的jar包。

无名小辈 4381

基于UWB技术的自动跟随避障系统设计研究

基于UWB技术的自动跟随避障系统设计研究 摘要:目前我国针对自动跟随避障系统方面的研究较少,同时国内自动跟随避障系统仍然处在未成熟阶段,多数仍停留在应用蓝牙控制或摄像头捕捉这类跟随方式,但这类方式在实际应用过程中往往会出现易受干扰,精度差,易受环境干扰等问题,这不仅会降低自动跟随避障系统的性能,同时也会对用户造成诸多困扰。因此,就需要结合目前较为有效的UWB技术,对自动跟随避障系统进行设计。基于此,本文首先将会针对UWB技术展开概述,而后对基于UWB技术的自动跟随避障系统组成展开分析,进而对基于UWB技术的

qq_43543515的博客 7991

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

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

qq_19342829的博客 3245

告别U盘!在Ubuntu 22.04上从零搭建PXE网络装机服务器(支持UEFI/Legacy双启动)

本文详细介绍了在Ubuntu 22.04上搭建PXE网络装机服务器的完整流程,支持UEFI/Legacy双启动模式。通过配置DHCP、TFTP和HTTP服务,实现无需U盘的高效批量系统部署,解决传统安装方式的介质依赖、版本控制和时间成本问题,显著提升机房维护和设备部署效率。

weixin_42569329的博客 248

【unity实战】随机地下城生成3——设置人物移动脚本、动画的切换和摄像机的跟随(含源码)

给房间添加触发器碰撞体,用来判断角色是否进入房间切割人物图片,注意人物每个图片高度可能不同,所有我们需要把轴心调整到人物的底部把人物跑步图片的高度,统一调成20,下面镂空,达到跳跃的效果快速创造人物动画,以人物idle为例,我们选中所有的idle人物图片,拖拽至窗口,unity就会自动生成,并提示保存动画位置别忘记设置人物排序图层,运行人物就动起来了新增run动画设置人物碰撞体设置刚体将重力设置为0,持续人物移动和动画切换的代码设置摄像机跟随单例代码在room中调用。

向宇的博客,专注php/web全栈 unity游戏开发,欢迎大家评论纠错 1051

【Java用法】windows10系统下修改jar中的文件并重新打包成jar文件然后运行

修改 BOOT-INF\classes\application-test.yml 中的数据库连接 url: jdbc:mysql://127.0.0.1:3306/(原来是 jdbc:mysql://192.192.192.55:3306),并把连接测试环境数据库账号和密码改成本地连接的账号和密码保存。测试环境(Linux)的代码(jar包)拉取到本地电脑(Windows10),然后连接本地电脑上的数据库并在本地电脑运行。前提:Windows10电脑,jar包文件,本地电脑已安装好MySQL数据库。

No8g攻城狮的博客 8129

uniapp [全端兼容] - 详细实现下拉筛选菜单功能组件,下拉式筛选菜单效果,类似电商美团点击筛选项底部弹出列表点击选择后自动收起(详细示例代码,全端兼容小程序、安卓苹果app、h5网页、nvue

uni-app,vue2,vue3,向下弹出菜单包含筛选功能,日期筛选,下拉框选择器,下拉多条件筛选,下拉式筛选菜单,uniApp如何实现条件下拉筛选,Uniapp官方条件筛选组件,下拉框式条件筛选插件组件,最好用的插件组件,多端兼容,下拉菜单筛选,过滤筛选列表,下拉筛选栏,多列联动的条件筛选,下拉菜单地区和筛选,微信小程序,支付宝小程序,h5网页,移动端网站,安卓app,苹果app,nvue,uniapp所有平台兼容,下拉菜单筛选,下拉式条件筛选,下拉列表,点击排序,级联筛选,uniapp实现下拉筛选

🏆 前端领域优质创作者 1万+

Java替换jar包中class文件(亲测有用)

在我们开发过程中,有一些场景只需要修改某个Java类中的很少的代码,然后又不希望重新打完整的jar包,这个时候,就可以只将修改后的某个Java类的class文件替换掉原来jar包中的class文件,重新启动服务即可。

让我们共同进步 1929

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

修改java的jar包

修改java的jar包

weixin_54143030的博客 1701

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

修改jar包中的文件

需求:将jar包中的几个文件修改.步骤:1.将jar包用解压软件打开,找到这几个.class

Mr.ZD的专栏 4218

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

替换jar里面的jar下的class文件报错处理

替换jar里面的jar下的class文件报错处理

wangzhi291的专栏 1837

Spring boot:项目部署不重新上传jar包,增量升级步骤

spring boot工程打成jar包发布后可能有需要改配置文件或者新增class文件的情况,在windows环境我之前是把jar后缀改成zip修改完配置文件后在改回jar,这样操作之后jar包就不能运行了。所以这里需要用到jar命令。 首先需要把jar包copy到一个空文件夹然后解压缩 jar -xf menjtest-0.0.1-SNAPSHOT.jar 然后再把需要修改的配置文件改了,或者需要添加的class文件加进去 修改完之后需要删除当前文件夹的原jar包 rm -rf menj

weixin_42201350的博客 1456

unzip和jar命令更新spring boot生成的jar包

unzip和jar命令更新spring boot生成的jar包 记录一个工作中遇到的小问题。 有一次修复一个bug,修改了spring boot项目的一个类,重新打了jar包需要scp到远程服务器。无奈当时网速巨慢,一个jar包50来M看样子得10好几分钟才能传完。本来就改了一个小地方,一个c...

chongzaijuan6800的博客 634

Java文件删除aar包_提取aar 包中的jar包,反编译再替换成新的aar

参考了http://blog.youkuaiyun.com/hekewangzi/article/details/44676797针对aar包,增加一些说明aar包本质应该是zip文件。可以用360解压缩打开并解压。里面有我们需要的jar包。一、使用反编译工具JD-GUI(JD-GUI相关操作见Java-----反编译class文件)打开要修改的jar包(如update.jar),找到jar包中要修改的cl...

weixin_42297675的博客 502

aspose破解

1跟踪源码,发现只需要修改zzZJ5中zzZaQ方法 2maven中引入javassist <dependency> <groupId>org.javassist</groupId> <artifactId>javassist</artifactId> <version>${javaassist.version}</version> </depe

weixin_43484846的博客 2354

修改jar包中class文件并重新打包

修改jar包中class文件并重新打包 org.apache.seatunnel.shade.connector.file.org.apache.avro.SchemaParseException: Illegal initial character: $ip 使用parquet格式Avro数据序列化过程中报错,报错原因:Avro对字段名有校验,只支持字母和下划线开头[A-Za-z_],本次报错Illegal initial character:` $ip`就是使用了`$ip`字段名,字段名`$`开头所以校

qq_44002865的博客 1817

修改jar包中class文件

需求:银行跑批任务执行时要调用行方自己的短信平台给科技部人员发送短信,行方提供一个jar文件,通过shell脚本传参调用即可。 问题点:shell脚本调用jar包没太大问题,关键在于,需要在jar包中的某个类中配置短信平台的用户名、密码。 解决方案:将jar反编译—>保存为.java文件—>修改文件内容—>重新编译—>将原来jar包解压—>替换class文件—&g...

seven_flowers的博客 7362

jar包修改与重新打包

jar包修改与重新打包 一、借助java decompiler 工具把jar包反编译。示例:bcprov-jdk15on-153.jar 然后依次操作 File===>Save All Sources 导出反编译Java文件 。(方便以下修改某个文件导入包中的关联文件) 二、使用eclipse新建项目把导出java文件放到对应目录下。 接下来就是保证你修改的java文件不报错能够正常编译...

xinljyuan的博客 4536

修改jar包文件,重新打包jar

一、网上搜到的下列替换方案都不行: 1、直接用WinRAR拖拽替换jar包内文件 失败,报错:压缩文件已损坏。 我以前替换成功过,但是启动的时候报错。这种方式可能会伤害到jar包的一些标识。 2、解压jar包,然后使用jar命令(比如jar -uvf)重新打包 失败,能打包,但是以可执行文件(./xxx.jar start)运行时提示:jar: cannot execute binary file 最终我用下面方案成功了: 将jar包文件解压,导入到maven项目的ma...

zollty的专栏 3859

Linux 环境中直接替换jar包中的配置文件或者class文件避免重新打包

如果java 工程是打包成jar工程,这个时候又修改了少量代码,重新打包上传就比较麻烦。可用如下方式局部替换配置文件或者class文件。 解析命令: jar: 包是Java中所特有一种压缩文档 -u 添加文件到jar包中 -v 生成详细的报造,并输出至标准设备 -f 指定jar包的文件名 -t 显示jar中的内容列表 -c 创建一个jar包 -t 显示jar中的内容列表 -x 解压jar包 -m 指定manifest.mf文件.(manifest.mf文件中可以对jar包及

summer的博客 6199
上一篇: FLINK单机版安装部署入门-1
下一篇: 替代visio画图工具Processon和drawio
牧竹子
博客等级 码龄17年 572粉丝 233原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值