⭐⭐⭐ Spring Boot 项目实战 ⭐⭐⭐ Spring Cloud 项目实战
《Dubbo 实现原理与源码解析 —— 精品合集》 《Netty 实现原理与源码解析 —— 精品合集》
《Spring 实现原理与源码解析 —— 精品合集》 《MyBatis 实现原理与源码解析 —— 精品合集》
《Spring MVC 实现原理与源码解析 —— 精品合集》 《数据库实体设计合集》
《Spring Boot 实现原理与源码解析 —— 精品合集》 《Java 面试题 + Java 学习指南》

摘要: 原创出处 网络 「网络」欢迎转载,保留摘要,谢谢!


🙂🙂🙂关注微信公众号:【芋道源码】有福利:

  1. RocketMQ / MyCAT / Sharding-JDBC 所有源码分析文章列表
  2. RocketMQ / MyCAT / Sharding-JDBC 中文注释源码 GitHub 地址
  3. 您对于源码的疑问每条留言都将得到认真回复。甚至不知道如何读源码也可以请教噢。
  4. 新的源码解析文章实时收到通知。每周更新一篇左右。
  5. 认真的源码交流微信群。

改个 JAR 里的文件,传统做法是什么?解压 → 找文件 → 改 → 重新打包 → 替换部署,五步操作,中间还可能因为目录结构搞错导致 JAR 损坏。改一个字符串,折腾半小时——这流程属实反人类。

JarEditor 这个 IDEA 插件,直接把流程压缩到“打开 → 改 → 保存”三步。

开源地址:https://github.com/Liubsyy/JarEditor

插件地址:https://plugins.jetbrains.com/plugin/24397-jareditor

1. 它能干什么?

一句话:像编辑普通项目文件一样编辑 JAR 包内的任何文件。不用解压,不用命令行,不用来回倒腾。

核心能力:

  • 直接编辑 class 文件和资源文件(properties、xml 等),零解压
  • 文件管理:在 JAR 内直接新增、删除、重命名文件和目录
  • 剪贴板操作:从外部粘贴文件进 JAR,或把 JAR 内文件复制出来
  • 全文搜索:搜索 JAR 包内容,class 文件基于反编译结果搜索,相当于 JAR 级别的全局 grep
  • SpringBoot fat jar 支持:嵌套 JAR 也能直接编辑
  • Kotlin 和 source jar 均支持
  • 字节码修改工具:混淆 JAR 编译不过?用 Javassist 直接改字节码

2. 三步改完一个 Class

第一步:打开。 安装插件后,打开任意 .class 反编译文件,顶部会多出一个 Jar Editor tab 页,点击切换即可进入编辑模式。外部 JAR 通过 File → Project Structure → Libraries → Add Library 添加即可。

第二步:改。 改完代码后点击 Save(Compile),插件自动编译并暂存修改。

第三步:保存。 点击 Build Jar,编译好的文件增量写入原 JAR 包。整个过程不到 30 秒。

资源文件的修改流程完全相同,只是不需要勾选编译选项。

3. 进阶:文件管理与搜索

在 JAR 包的项目视图中右键,选择 JarEditor → New / Delete / Rename 等操作菜单,可以在 JAR 内直接增删改文件。支持多选删除,重命名即时生效。

搜索能力也值得一提:点击工具栏的搜索图标,输入关键词即可全文检索 JAR 内容。class 文件的搜索基于反编译结果,普通文件直接匹配文本——定位问题时非常高效。

4. 混淆 JAR 怎么办?

普通编译校验非常严格,混淆后变量名全是 a、b、c、d 的代码,反编译后再编译大概率报错。JarEditor 提供了 Class bytes tool,集成 Javassist,可以用接近原生 Java 代码的风格直接修改字节码,绕过编译器的严格校验。

注意:Javassist 语法和原生 Java 有区别——不支持泛型、增强 for 循环、lambda 等高级特性。但对于临时补丁来说,够用了。

5. 编译细节

几个容易踩坑的点:

  • 编译 JDK 取自 IDEA 的 SDK 列表,可手动选择目标版本
  • classpath 依赖 来自项目的 Libraries 配置,编译报找不到类就检查依赖
  • Save 先将改动暂存到 JAR 同级的临时目录,Build Jar 再增量写入并自动清理

选择 SDK Default 时对应的 JDK 版本:

IDEA 版本 对应 JDK
2020.3 - 2022.1 JDK 11
2022.2 - 2024.1 JDK 17
2024.2+ JDK 21

说句实在话:这个插件不是你每天都会用的工具,但在需要紧急热修复第三方 JAR、或者调试时临时改个三方库看效果的时候,它能省下的时间是实打实的。收藏备用,关键时刻救命。

文章目录
  1. 1. 1. 它能干什么?
  2. 2. 2. 三步改完一个 Class
  3. 3. 3. 进阶:文件管理与搜索
  4. 4. 4. 混淆 JAR 怎么办?
  5. 5. 5. 编译细节