1.如何直接修改jar包(无需解压)
2.JarEditor可直接修改jar包的码修IDEA插件
如何直接修改jar包(无需解压)
有的时候我们需要直接修改Jar包内的某个class,一般的码修方式是解压->反编译class->修改反编译的class->编译->编译后class拽回jar(或者直接打包jar),中间的码修流程还是比较繁琐的,解压和打包还需要通过各种命令,码修反编译还需要用到JD-GUI,码修写代码还得新建java文件甚至还要用到编辑器或者IDE,码修网上请假源码编译还得注意设置目标版本。码修
这一顿操作猛如虎的码修过程中,大脑在多种工具、码修各种命令和各种注意事项中来回切换,码修我们知道大脑就跟CPU一样,码修来回切换上下文势必浪费大量脑细胞,码修nodejs源码研究集中精力做一个点的码修事既轻松又效率高。
于是码修我想,有没有直接修改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的traceroute程序源码时候,将修改过的文件增量写入jar内,最后删除临时目录。
下面是一个完整的修改例子:
修改资源文件的话也是一样的操作,不过不用编译,也是点击Save直接保存到临时目录,最后Build Jar写入jar内。
通过简单的几步,就实现了修改Jar内文件的一系列自动化流程。
有时我们还会新增或者Jar包内的一些文件/文件夹,于是我在Jar包内的文件上加了右键的操作Action
我已经发布插件到Jetbrains的插件市场,插件市场搜索JarEditor可直接安装使用,夏普电视 源码也可根据文末源码自己编译自己安装(基于SDK IDEA.3),IDEA最低要求.3,IDEA.3及之后的版本均可安装使用。
然后就可以直接打包jar包内的文件了,如果是外部jar,需要在File->Project Structure->Libraries中添加jar即可打开jar内的文件。
另外文章篇幅有限,下面是具体插件源码地址以供学习交流:
编译和打包的原理都在源码和注释里。
欢迎交流!
JarEditor可直接修改jar包的IDEA插件
在进行代码开发和维护过程中,常常会遇到需要直接修改jar文件内部类的问题,传统的做法是先解压jar文件,再反编译class文件,修改后再重新编译和打包。这一系列操作繁琐且容易出错,耗费大量时间和精力。
然而,市面上并没有满足直接编辑jar文件的IDEA插件,这促使我着手编写一个名为JarEditor的插件,以实现无需解压即可编辑jar包内部类的功能。
JarEditor插件的使用流程简便高效。首先,IDEA自带的反编译插件可以打开jar文件,并展示反编译后的类代码。随后,通过在插件市场安装JarEditor,用户可以访问插件提供的Jar Editor功能区,直接在反编译的代码上进行修改。
修改完成后,用户只需点击“Save/Compile”按钮,系统将自动编译修改的java内容,并保存到修改的类文件中。接着,通过点击“Build Jar”按钮,系统将把修改后的类文件写入到原始jar包中,实现一气呵成的编辑过程,无需再进行复杂的解压和打包操作。
不仅如此,JarEditor还支持修改jar包内的资源文件。用户只需按照相同的流程操作,即可完成资源文件的编辑和更新。在查看jar包工程展示图时,用户可以通过右键任意文件,选择“New”或“Delete”操作,轻松新增或删除文件。
总结而言,JarEditor插件大大简化了编辑jar文件的过程,提高了开发效率。用户只需安装插件,并遵循简单操作步骤,即可实现直接在jar文件中进行代码修改,节省了大量时间,减少了出错几率。感兴趣的开发者可以尝试使用,源码地址在GitHub上可供参考。支持IDEA最低版本为.3,兼容更高级别版本。
欢迎广大开发者交流反馈,共同提升开发体验。