陈同学
微服务
Accelerator
About
#Jar包反编译工具: JD-GUI 与 fernflower 当需要处理无源代码的久远jar包,获取其java源码时需要反编译工具的支持。 本文介绍两个工具:[JD-GUI](http://java-decompiler.github.io/) 和 IDEA自带的 [java-decompiler](https://github.com/JetBrains/intellij-community/tree/master/plugins/java-decompiler/engine). 以反编译 **logback-core-1.1.11.jar** 为例,jar包位于 `~/jd` 目录。 ## JD-GUI 打开 jar 包后 **Save All Sources** 即可,会生成一个 **src.zip** 结尾的压缩包。  解压 **logback-core-1.1.11.jar.src.zip** 可得到所有源码。以 **ConsoleAppender.java** 部分代码为例,生成的源码格式比较乱,左侧有一排注释,最后会生成反编译说明。  ## fernflower 该组件是 IDEA 采用的反编译工具,在IDEA打开class文件时,就是通过该组件的反编译能力。 [java-decompiler](https://github.com/JetBrains/intellij-community/tree/master/plugins/java-decompiler/engine) 是IDEA中的插件名称,实际上来源于 [fernflower](https://github.com/fesh0r/fernflower) 工具。 在Mac下,**java-decompiler.jar** 位于 `/Applications/IntelliJ IDEA.app/Contents/plugins/java-decompiler/lib`,执行以下命令: ```shell cd /Applications/IntelliJ\ IDEA.app/Contents/plugins/java-decompiler/lib/; java -cp java-decompiler.jar org.jetbrains.java.decompiler.main.decompiler.ConsoleDecompiler ~/jd/logback-core-1.1.11.jar ~/jd/src/ ``` 命令格式为:`java -jar java-decompiler.jar [-<option>=<value>]* [<source>]+ <destination>` * source 表示jar包所在目录,可以填写单个jar包,也可以填写一个目录(将解压目录下所有jar包) * destination 表示反编译的java源码生成目录 执行命令后,将在 `~/jd/src` 下生成 **logback-core-1.1.11.jar** 文件,这个jar包就是源文件,解压该jar包即可。 ```shell unzip ~/jd/src/logback-core-1.1.11.jar; ``` 反编译后效果如下,格式非常友好。  ## 小结 日常查看jar包可用 JD-GUI,反编译jar包时推荐使用fernflower,格式友好、正确率高,而JD-GUI格式混乱,同时报错特别多。
本文由
cyj
创作,可自由转载、引用,但需署名作者且注明文章出处。
文章标题:
Jar包反编译工具: JD-GUI 与 fernflower
文章链接:
https://chenyongjun.vip/articles/125
扫码或搜索 cyjrun 关注微信公众号, 结伴学习, 一起努力