需求:银行跑批任务执行时要调用行方自己的短信平台给科技部人员发送短信,行方提供一个jar文件,通过shell脚本传参调用即可。

问题点:shell脚本调用jar包没太大问题,关键在于,需要在jar包中的某个类中配置短信平台的用户名、密码。

解决方案:将jar反编译—>保存为.java文件—>修改文件内容—>重新编译—>将原来jar包解压—>替换class文件—>压缩为jar包。


是时候表演真正的技术啦!


首先,看一下我的msg.jar包的结构,直接解压是这样式的~

我要修改的代码就是这个T.class,但是class文件没办法直接修改

所以我们需要反编译工具,我使用的是jd-gui。

链接:https://pan.baidu.com/s/1qP4N8Uvss8lRbWp_1h91Fg 
提取码:i6mk

打开后:

反编译还是没办法直接修改的,Ctrl+S将其保存为.java文件

保存之后就可以通过编辑工具进行修改了,因为我的这个类是依赖了其他很多类的,修改完直接javac编译该文件会报错

所以,我们要建一个项目,为这个java文件配置相同的目录结构,把这个类所依赖的jar包(其实就是本jar包,但是要先解压,然后把该类的class文件删掉,再压缩为jar文件即可,压缩为jar包的方式见后边)导入,将项目打成jar包,再将jar包解压,将修改的类的class文件拿出来就可以了。

为了简便,我用idea直接建了一个spring boot项目,

因为我要改的class文件就在jar包根目录下,所以我直接保存后的java文件放到启动类同目录就行了,如果不是的话,根据class文件所在jar包的目录结构在项目中创建对应目录结构即可。

这时候,其实是会报错的,因为依赖的很多类都没有,但我已经引入jar包了,所以不会报错。

引入剔除该class文件的jar包

还有修改一下jdk之类的操作不细说了,pom文件加一下本地jar包依赖、jdk版本、和编译打包的一些依赖配置。

<properties><java.version>1.8</java.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope><exclusions><exclusion><groupId>org.junit.vintage</groupId><artifactId>junit-vintage-engine</artifactId></exclusion></exclusions></dependency><dependency><groupId>com.jugan.util</groupId><artifactId>com.jugan.util</artifactId><version>1.0</version><scope>system</scope><systemPath>${project.basedir}/lib/msg.jar</systemPath></dependency></dependencies><build><resources><resource><directory>lib</directory>
<!--                <targetPath>BOOT-INF/lib/</targetPath>--><includes><include>F:/workspace/msg/lib/msg.jar</include></includes></resource></resources><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build>

然后,修改代码

maven 编译打包

编译打包成功,去把打好的jar包中的class文件拿出来,替换掉原始jar包中的class文件,

然后将其压缩为jar包。

注意,在解压缩的jar包的文件夹里边选中所有文件进行压缩,直接压缩文件夹的话,会多出一层。

大功告成。

修改jar包中class文件相关推荐

  1. jd+jbe修改jar包中class文件

    有时候从网上下的java demo中,有的是发布后的环境,所以只有jar包信息,没有对应的源码,我们要把其中的信息修改下,所以就需要我们本文中提到的直接修改java class信息.参考网上资料好,赶 ...

  2. Web项目替换jar包中的文件的方法

    经常遇到这样的问题,需要修改jar包中的方法.应该如何做? 1.有些很人性化的框架jar包,比如SpringSecurity,可以修改配置文件指定一个新建的类,让类实现Jar包中的对应的接口就好了. ...

  3. java -uf_Java如何快速修改Jar包里的文件内容

    需求背景:写了一个实时读取日志文件以及监控的小程序,打包成了Jar包可执行文件,通过我们的web主系统上传到各个服务器,然后调用ssh命令执行.每次上传前都要通过解压缩软件修改或者替换里面的配置文件, ...

  4. 使用jar命令替换jar包中指定文件

    一.jar命令用法 -c 创建新的归档文件-t 列出归档目录和文件-x 解压缩已归档的指定(或所有)文件-u 更新现有的归档文件-v 在标准输出中生成详细输出 / 提供更详细输出信息-f 指定归档文件 ...

  5. Linux修改jar包中的配置文件

    打包以及修改jar包 cd genesys_data_etl mvn clean package -Poffline -Dmaven.test.skip=true 日志如下: [INFO] --- m ...

  6. 在swt中获取jar包中的文件 uri is not hierarchical

    uri is not hierarchical 学习了:http://blog.csdn.net/zdsdiablo/article/details/1519719 在swt中获取jar包中的文件: ...

  7. 打包部署后无法读取jar包里的文件(实测可行,Java中读取jar包中的文件)

    打包部署后无法读取jar包里的文件 Java中读取jar包中的文件 linux中无法读取jar包中的内容(windows可以的!),如何解决 一.背景 项目中免不了需要读取文件,如果文件用绝对路径读取 ...

  8. 获取jar包中的文件,及遍历jar包中的文件

    获取jar包中的文件 ClassPathResource resource1 = new ClassPathResource("文件夹" + File.separator + &q ...

  9. java获取jar包中的文件资源

    java获取jar包中的文件资源 一.问题示例 1.1 项目开发时 1.2 打包成jar后 二.解决方案 2.1 解决方法 2.2 实现 问题描述:   我们常常在代码中读取一些资源文件(比如图片,音 ...

最新文章

  1. 奇瑞a3中控按键图解_纷纷亮相,奇瑞众多黑科技悄然现身,焦点全在星途VX智能座舱上...
  2. 什么是Gut–Skin Axis
  3. 城市大轰炸(洛谷P1830题题解,Java语言描述)
  4. 如何实现C#.net图像处理
  5. monoGSM信号强度示例
  6. select标签multiple属性的使用方法
  7. 计算机游戏软件视频,录屏软件具体怎么使用?记录电脑游戏视频
  8. 论文中的三线表及表格规范
  9. Citespace(十一)---对图谱中Q值和S值的说明—来自《引文空间分析原理与应用》p24
  10. css好看的html径向渐变,CSS3径向渐变
  11. Archlinux无法启动vmware虚拟机
  12. android 编译
  13. 旅行商问题(TSP)概述
  14. Leetcode 简单四 罗马数字转整数
  15. 他很惊讶_局座您是来参加云栖大会吗?
  16. Qt中重定义的解决方案
  17. plsql登录时没有可选数据库和链接问题
  18. 数据库中间件mysql-proxy细节
  19. Google Earth Engine(GEE)——风向(RTMA: Real-Time Mesoscale Analysis数据集)可视化趋势图(美国区域为例)
  20. cdrx7拼版工具在哪里_coreldraw插件 魔镜二周年 印刷拼版教程

热门文章

  1. 跟着团子学SAP:SAP用户状态管理详解(含权限分配等) OK02
  2. stm32F105的Canable开源usb-can项目
  3. 美国拟发布纽扣电池或硬币电池安全标准和通知要求ANSI C18. 3M
  4. ThingsBoard使用规则链将设备信息转发至外部mqtt
  5. 初识-Python-day03
  6. 360度全景标定方法_一种车辆行驶360度全景行车标定板的制作方法
  7. 关于matlab提示“警告: 矩阵为奇异工作精度” 的问题
  8. 局域网映射IPV6记录
  9. maven添加sqljdbc4.jar,并引用
  10. 计算机网络学习笔记(详尽版)