跳转到内容
彼岸论坛
欢迎抵达彼岸 彼岸花开 此处谁在 -彼岸论坛

[Java] 一键修改 JAR 包内文件: JarEditor 插件详细指南


小天管理

已推荐帖子

背景

在开发中我们有时会遇到这样的场景,需要修改 jar 包内某个 class ,常见的方法就是先解压缩,然后反编译这个 class ,新建 java 修改再编译,最后再打包,整个过程是非常耗时的。

这里向大家介绍一款 IDEA 插件:JarEditor ,可以一键修改 JAR 包内文件,无需解压。

插件安装

首先在插件商城搜索 JarEditor ,可直接安装插件

JarEditor_install.png

插件使用

1. 修改 class 文件

安装完后,任意打开一个 jar 的 class ,可以看到反编译后的 class 内容,选中 Jar Editor 的 tab 页签,就可以直接编辑 class 了

image.png

修改完代码后先点击 Save,这个过程会编译 class ,编译成功后点击Build Jar就修改 jar 完成了,是不是很简单?下面是一个修改的例子。

Jul-06-2024 15-25-13.gif

SDK 可以选择需要的 JDK 或者其他 SDK ,Target 为编译 class 的目标版本,默认是和反编译的 class 前的版本保持一致。

附:修改外部 jar

选择 File->Project Structure->Libraries ,然后添加工程外的 jar 即可打开 jar 内文件修改

image.png

也可以将 jar 包粘贴到本项目中,然后右键->Add as Library...

image.png

2. 修改配置文件

操作流程同修改 class 文件,不需要选择 Compile

image.png

3. JAR 包内新增文件

在工程视图 jar 包内某个文件夹上右键->JarEditor->New,可以新建 Class/Kotlin/File/Directory

image.png

选择后输入文件名即可在 jar 内新增文件,默认是空文件

image.png

新增后打开可以写入内容,Class 和 Kotlin 新建完文件是有模版的,无需后缀名,如果是 JarEditor->New->File 则需要写文件后缀名。

image.png

3. 删除 JAR 包内文件

在工程视图 jar 包内某个文件或者文件夹上右键->JarEditor->Delete,则会删除选择的目录或者文件,支持多选。

image.png

4. 重命名文件

在工程视图 jar 包内某个文件或者文件夹上右键->JarEditor->Rename,输入名字后即可将原来的名字修改为新的名字,修改完立即生效。

image.png

5. 拷贝 JAR 包内文件到外部文件夹

在工程视图 jar 包内某个文件或者文件夹上右键->JarEditor->Copy,可以将 jar 包内文件拷贝到剪切板(支持多选)

image.png

然后在外部任意一个文件夹内,使用 Ctrl+V ,即可将刚才复制的文件拷贝到这个目录

image.png

6. 粘贴外部文件到 JAR 包内

外部文件使用 Ctrl+C 复制后,在 jar 内某个文件夹上右键->JarEditor->Paste(不能直接用 Ctrl+V ,Ctrl+V 被 IDEA 默认占用了),即可将剪切板的文件粘贴到 jar 包内,一气呵成。

image.png

7. JAR 包内搜索字符串

工具栏有一个搜索图标,点击后输入需要搜索的字符串,可搜索到 jar 包内的文件,包括 class 和普通文件。

image.png

点击搜索后的文件列表,可跳转到具体的文件

image.png

搜索的 class 如果是 class jar 的话取决于反编译的内容,如果是 source jar 取决于 java 文本。

8. source jar 的支持

IDEA 内打开的 jar 分两种,class jar 和 source jar ,如果下载了源码的话,打开的是 source jar ,即打开的是一个 java 文件,而不是 class 文件,这里一定要注意

image.png

此时如果修改代码的话,生效的是 source jar ,比如这里改的是 FindInstancesOfClass-1.0.3-sources.jar 。

image.png

那如何修改 class jar 呢?

点击 JarEditor Tools 上面的跳转链接:Click hear to open class jar 即可跳转到 class 文件

image.png

此时展示的 class 为反编译的代码,可修改 class 文件,按 修改 class 文件 的流程操作即可。

也可以从 source jar 中导入代码:Import from source jar

image.png

Import from source jar 和直接在 souce jar 中的 java 修改的区别是:前者修改的是 class jar 后者是 source jar 。

一些机制和原理

SDK 的选择

目前支持 java 和 kotlin 两种文件编译,后续可能会增加更多的编译文件支持。

选择 SDK Default 时,是使用的 IDEA 运行时自带编译器,即 javax.tools.JavaCompiler,详细可阅读源码。

选择其他 JDK 时,默认使用的是 javac 外部命令编译。

image.png

编译时选择的 Target 的范围是 1.1~所有 JDK 的版本最大值。

Save ( Compile )

考虑到可能会修改多个文件,会将当前修改的内容(编译)保存到所在 jar 包目录的临时目录 jar 名_temp/jar_edit_out 下,当点击 Build Jar 将增量文件写入 jar 后,会删除临时目录,也可手动清理临时目录。

image.png

编译依赖

在编译时,依赖的 jar 为当前工程的 Libraries ,如果编译时提示依赖包找不到,可以添加依赖即可。

另外 class 文件的内容取决于反编译的结果,如果混淆的代码则不太方便修改和编译。

SDK Default

当选择 SDK Default 编译时,对应的 JDK 版本如下:

IDEA JDK
IDEA 2020.3 ~ IDEA 2022.1 JDK 11
IDEA 2022.2 ~ IDEA 2024.1 JDK 17
IDEA 2024.2 及更高版本 JDK 21

总结

本文主要介绍了使用 JarEditor 直接对 jar 包文件进行增删改查操作,简化了修改 jar 的流程,感兴趣的朋友可以去试试。

本文篇幅有限,具体原理和实现细节可阅读源码

源码: https://github.com/Liubsyy/JarEditor

意见的链接
分享到其他网站

加入讨论

您现在可以发表并稍后注册. 如果您是会员,请现在登录来参与讨论.

游客
回复主题...

×   粘贴为富文本.   粘贴为纯文本来代替

  只允许使用75个表情符号.

×   您的链接已自动嵌入.   显示为链接来代替

×   您之前的内容已恢复.   清除编辑器

×   您无法直接粘贴图片.要从网址上传或插入图片.

×
×
  • 创建新的...