如何直接修改jar包-无需解压

背景


有的时候我们需要直接修改Jar包内的某个class,一般的方式是解压->反编译class->修改反编译的class->编译->编译后class拽回jar(或者直接打包jar),中间的流程还是比较繁琐的,解压和打包还需要通过各种命令,反编译还需要用到JD-GUI,写代码还得新建java文件甚至还要用到编辑器或者IDE,编译还得注意设置目标版本。

这一顿操作猛如虎的过程中,大脑在多种工具、各种命令和各种注意事项中来回切换,我们知道大脑就跟CPU一样,来回切换上下文势必浪费大量脑细胞,集中精力做一个点的事既轻松又效率高。

于是我想,有没有直接修改Jar包的插件呢?不用解压就能直接修改反编译的class,写完直接增量编译打包,整个过程中全程是自动化的。

我翻遍了插件市场,并没有找到这样的插件,于是我打算自己写一款这样的IDEA插件JarEditor来实现无需解压直接编译Jar包,包括class和资源文件。

开发插件历程


本质上开发插件还是替换上面的手动修改jar文件的流程,但是又要尽可能复用现有的功能

于是我在IDEA反编译的jar包编辑页增加一个辅助编辑页(*有点类似MavenHelper在pom.xml的编辑页增加辅助页*),用来修改反编译的class代码

这样几乎不费吹灰之力就解决了无需解压和反编译的两个流程点,因为IDEA是自带Jar内class反编译的。

点击Jar Editor的tab标签辅助页面,我加上了几个操作的UI

里面有默认的JDK版本和编译目标版本,默认编译版本和要修改的class版本保持一致,当然也可以手动设置。

然后在Jar Editor的辅助页就可以直接编辑代码了

考虑到可能要修改多个文件,所以我做了两个按钮,Save/Compile和Build Jar,点击Save/Compile可将当前修改的jar临时编译并写入到jar包所在目录的子目录jar_edit_out中,当点击Build Jar的时候,将修改过的文件增量写入jar内,最后删除临时目录。

下面是一个完整的修改例子:


修改资源文件的话也是一样的操作,不过不用编译,也是点击Save直接保存到临时目录,最后Build Jar写入jar内。


通过简单的几步,就实现了修改Jar内文件的一系列自动化流程。

有时我们还会新增或者Jar包内的一些文件/文件夹,于是我在Jar包内的文件上加了右键的操作Action

可以增删文件/文件夹,点击立即对Jar包生效,就不写入临时文件了。


插件使用


我已经发布插件到Jetbrains的插件市场,插件市场搜索**JarEditor**可直接安装使用,也可根据文末源码自己编译自己安装(基于SDK IDEA2020.3),IDEA最低要求2020.3,IDEA2020.3及之后的版本均可安装使用。

然后就可以直接打包jar包内的文件了,如果是外部jar,需要在File->Project Structure->Libraries中添加jar即可打开jar内的文件。


另外文章篇幅有限,下面是具体插件源码地址以供学习交流:

https://github.com/Liubsyy/JarEditor

编译和打包的原理都在源码和注释里。

欢迎交流!

  • 23
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
你可以使用以下命令启动这些 jar 包: ``` nohup java -jar codegen-service.jar > codegen-service.log & nohup java -jar data-market-service-integration.jar > data-market-service-integration.log & nohup java -jar data-market-service-mapping.jar > data-market-service-mapping.log & nohup java -jar data-market-service.jar > data-market-service.log & nohup java -jar data-masterdata-service.jar > data-masterdata-service.log & nohup java -jar data-metadata-service-console.jar > data-metadata-service-console.log & nohup java -jar data-metadata-service.jar > data-metadata-service.log & nohup java -jar data-quality-service.jar > data-quality-service.log & nohup java -jar data-standard-service.jar > data-standard-service.log & nohup java -jar data-visual-service.jar > data-visual-service.log & nohup java -jar datax-auth.jar > datax-auth.log & nohup java -jar datax-config.jar > datax-config.log & nohup java -jar datax-eureka.jar > datax-eureka.log & nohup java -jar datax-gateway.jar > datax-gateway.log & nohup java -jar datax-tool-monitor.jar > datax-tool-monitor.log & nohup java -jar email-service.jar > email-service.log & nohup java -jar file-service.jar > file-service.log & nohup java -jar quartz-service.jar > quartz-service.log & nohup java -jar system-service.jar > system-service.log & nohup java -jar workflow-service.jar > workflow-service.log & ``` 其中,`nohup` 命令可以使程序在后台运行,并将输出重定向到日志文件中。`&` 符号表示在后台运行该命令。请确保在执行此命令之前,已经安装了 Java 运行时环境,并且当前路径下存在相应的 jar 文件。如果 jar 文件不在当前路径下,可以使用绝对路径或相对路径指定文件的位置。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值