如何在Vim中反编译Java Class文件?求适配高版本Java的可行方案
在Vim中实现兼容高版本Java的反编译功能(媲美IntelliJ)
作为从Vim转投过IntelliJ的用户,太懂你怀念那种一键反编译Class文件的爽感了!JAD确实早就被Java版本迭代甩在身后了,下面给你几个亲测有效的方案,全都是支持Java 8+甚至Java 17+的:
方案一:直接用IntelliJ同款的Fernflower反编译器
IntelliJ默认的反编译引擎就是Fernflower,用它能得到和IDE一模一样的反编译结果,完全兼容高版本Java语法。
步骤很简单:
- 先获取Fernflower的Jar包(可以从它的开源仓库编译,或者找现成的发行版)
- 在你的
~/.vimrc里添加自定义命令和函数:" 自定义反编译命令,调用Fernflower command! -nargs=1 JadJava call FernflowerDecompile(<f-args>) function! FernflowerDecompile(classfile) " 替换成你实际的Fernflower Jar路径 let jar_path = "/Users/yourname/tools/fernflower.jar" " 创建临时目录存放反编译结果 let output_dir = tempname() call mkdir(output_dir, "p") " 执行反编译命令 execute "!java -jar " . jar_path . " " . a:classfile . " " . output_dir " 找到反编译后的Java文件并打开 let decompiled_file = glob(output_dir . "/*.java") execute "edit " . decompiled_file endfunction - 以后在Vim里打开
.class文件时,只需要输入:JadJava %,就能直接打开反编译好的Java文件了!
方案二:用Vim插件一键搞定——vim-javadecompiler
如果不想自己写函数,这个插件已经封装了Fernflower、Procyon等主流反编译器,配置更省心。
安装(以Vim-Plug为例):
在~/.vimrc里添加:Plug 'dense-analysis/vim-javadecompiler'然后执行
:PlugInstall完成安装。配置(指定用Fernflower):
在~/.vimrc里补充:let g:javadecompiler_decompiler = 'fernflower' let g:javadecompiler_fernflower_path = "/Users/yourname/tools/fernflower.jar"使用:
打开.class文件后,输入:JavaDecompile,插件会自动帮你反编译并在Vim中打开结果,甚至支持跳转查看关联类。
方案三:备选方案——Procyon反编译器
Procyon也是一款非常优秀的开源反编译器,对Lambda、Stream这类现代Java语法的反编译效果同样出色,如果你想试试不同的反编译结果,可以用它:
同样可以配置自定义命令,或者在vim-javadecompiler里切换成procyon即可。单独配置的话,在~/.vimrc里加:
command! -nargs=1 ProcyonJava call ProcyonDecompile(<f-args>) function! ProcyonDecompile(classfile) let jar_path = "/Users/yourname/tools/procyon-decompiler.jar" let output_file = tempname() . ".java" execute "!java -jar " . jar_path . " " . a:classfile . " > " . output_file execute "edit " . output_file endfunction
小技巧:添加快捷键提升效率
如果经常需要反编译,可以把命令映射成快捷键,比如在~/.vimrc里加:
nnoremap <leader>jd :JadJava %<CR>
以后打开Class文件,按<leader>jd(默认leader是反斜杠)就能一键反编译,和IntelliJ的操作效率差不多!
内容的提问来源于stack exchange,提问作者金允雄Oliver
相关产品推荐
相关产品推荐

