当java应用程序在运行过程中遇到问题时,一般会抛出异常并打印堆栈信息,这些堆栈信息链中常常可以看到一些二方包和三方包。在排查问题时,很多时候我们需要查看这些二方包和三方包的源码。二方包是公司内部其它部门的产出物,虽然折腾些但协调下一般还是能查看到源码的;三方包如果是开源的项目,也能找到源码;但对于非开源项目的 jar 包,如果想查看源码,就不得不用到反编译工具了。

目前市面上常见的java反编译工具,及其官方链接如下:

jad:  https://varaneckas.com/jad/
JadClipse: 基于jad 的适用于eclipse 的插件:http://jadclipse.sourceforge.net/wiki/index.php/Main_Page

jd-gui:  http://java-decompiler.github.io/

其中 jd-gui是 jd project 名下的产品,jd project名下包括了3款具体产品,如下图所示:

除此之外,IntelliJ IDEA 也有自己的反编译插件 java bytecode decompiler,如下如所示:

在此详细介绍下 jd project:Java Decompiler 项目 ”旨在开发一些工具,以便反编译和分析Java 5以及更高本的Java的“字节代码”。该项目下包括三款具体产品:

JD-Core:是个library 库,可以用来从一个或多个“.class”文件中重建Java源代码;

JD-GUI:是图形化的反编译工具,可单独使用,内部整合了jd-core;

JD-Eclipse:是适用于Eclipse平台的反编译插件,内部整合了jd-core;
注意:原来jd还有个JD-IntelliJ,是适用于IntelliJ IDEA 平台的反编译插件,内部同样整合了jd-core,但该产品目前已经不再更新了,再jd官网看不到它的影子,在 IntelliJ Plugin官网还能看到该插件的影子,但有以下不再出于维护期的说明:

笔者比较推荐使用jd-gui,该工具是图形化的,下载下来解压即可直接适用同时该工具支持拖拉操作,支持 class/ jar/war/ear/zip等文件类型,也支持层次性地查看class和moduel:

除此之外,jd-gui还支持搜索变量/常量/方法名等,这是很实用的,如下图所示通过方法名搜索到了所有包含该方法的类,也展示了期所在的包路径等详细信息,直接点击即可查看相关源码:

jd-gui也支持导出反编译得来的源代码,如下如所示,导出后是压缩格式的源码包,直接解压后,即可作为工程导入ide工具,分析查看源码:

相对来说,使用IDEA自带的反编译插件JetBrains Decompiler,反编译jar包并导入查看源码,就相对繁琐一些,涉及到以下步骤:
首先确保IDEA安装了idea反编译插件 java Bytecode Decompiler(通过【Settings】——>【Plugins】输入Decompiler查看否有安装Java Bytecode Decompiler这个插件);

然后定位到该插件的路径,比如:D:\programs\IDEA\IntelliJ2020.1.1\plugins\java-decompiler\lib\java-decompiler.jar;
然后在命令行使用命令反编译 jar 包,(需要首先在jar包同目录下创建一个目录,如decompiler_test文件夹,然后发布命令反编译): java -cp "D:\programs\IDEA\IntelliJ2020.1.1\plugins\java-decompiler\lib\java-decompiler.jar" org.jetbrains.java.decompiler.main.decompiler.ConsoleDecompiler -dgs=true datago-base-1.4.1.jar datax-decompile2
以上命令执行完毕后反编译出来的也是压缩格式的源码包,直接解压后,也可作为工程导入ide工具,分析查看源码。

如上所述,当需要反编译整个二方或三方jar包,而不仅仅是该jar包中某一个或几个class文件,并需要把反编译结果作为工程导入到IDE工具,查看源码分析源码时,jd-gui是个很不错的选择。

相关链接附录:
https://varaneckas.com/jad/
http://jadclipse.sourceforge.net/wiki/index.php/Main_Page
http://java-decompiler.github.io/
https://plugins.jetbrains.com/

介绍一款好用的java反编译工具 - jd-gui相关推荐

  1. 【转载】Mac安装 Java 反编译工具 JD-GUI

    一.安装 下载地址:https://github.com/java-decompiler/jd-gui/releases 选择对应平台的资源进行下载,这里可选择:jd-gui-osx-1.6.6.ta ...

  2. 介绍一款特别好用的java反编译工具jd-gui

    目录 写在前面 开始 写在前面 之前用过另一款java反编译工具jad 但是这个工具有个问题就是对于一些java8的新特性,比如lambda表达式是解析不出来的,更不用说java9和java17了.关 ...

  3. 一些Java反编译工具/源代码查看工具的介绍

    2019独角兽企业重金招聘Python工程师标准>>> 有的朋友抱怨他们在使用他们公司的闭源框架时看不到底层的源代码.那么可以尝试使用一些Java反编译工具. 下面我举个例子介绍具体 ...

  4. 推荐一款非常好用的java反编译工具(转)

    源: 推荐一款非常好用的java反编译工具 转载于:https://www.cnblogs.com/LittleTiger/p/4556239.html

  5. [转]一款可以反编译jar包的java反编译工具-JD-GUI(绿色软件)

    [转]一款可以反编译jar包的java反编译工具-JD-GUI(绿色软件) 文章分类:Java编程 该软件无需安装,界面清爽. 转自:http://www.devdoc.org/index.php/a ...

  6. 7 款开源 Java 反编译工具

    7 款开源 Java 反编译工具 今天我们要来分享一些关于Java的反编译工具,反编译听起来是一个非常高上大的技术词汇,通俗的说,反编译是一个对目标可执行程序进行逆向分析,从而得到原始代码的过程.尤其 ...

  7. 强烈推荐的一款 Java 反编译工具:JAD

    01.JAD 是什么 JAD 是一款老牌的.经典的.使用起来简单的 Java 反编译工具.大家都知道,将源代码转换成二进制执行代码的过程叫"编译",比如将 Java 源代码编译成 ...

  8. Java反编译工具Luyten介绍

    比较精准的一个java反编译工具,笔者有时候用jd-gui反编译不出来的class用luyten都可以反编译出来. 官方网站:https://github.com/deathmarine/Luyten ...

  9. java反编译工具_Java开发必会的反编译知识(附支持对Lambda进行反编译的工具)...

    我之前推送过Java代码的编译与反编译,其中简单的介绍了Java编译与反编译相关的知识,最近给GitChat写<深入分析Java语法糖>的时候,又用到了很多反编译相关的知识,遂发现哪篇文章 ...

最新文章

  1. Laravel 学习笔记之 Query Builder 源码解析(下)
  2. Grid表格的js触发事件
  3. 团队项目电梯会议视频
  4. 管理linux中文件共享,Linux操作系统文件管理器的共享
  5. 融云发送图片消息_IM消息ID技术专题(五):开源分布式ID生成器UidGenerator的技术实现...
  6. mysql查询不确定的信息_mysql-非常复杂的查询,不确定是否可行.涉及...
  7. 用浏览器怎样监控网页内容变化
  8. 一路走好——稻盛和夫先生
  9. DP-900认证考试攻略
  10. 智能电视 无服务器,服务器之家教你修改DNS,让电视、网络机顶盒告别卡顿
  11. [2018国家集训队][UOJ449] 喂鸽子 [dp+组合数学]
  12. 元气骑士最新版全武器图鉴【支持搜索】(截至2022年4.0版本)
  13. 2023年北京科技大学机械专硕考研成功上岸经验分享
  14. Wangle源码分析:ClientBootstrap
  15. ShortCuts的使用
  16. 淘淘商城——展示购物车商品列表
  17. 关于如何使用python下载各大网站的视频
  18. 线性代数拾遗(3)—— “系数矩阵的秩” 和 “齐次线性方程组基础解系向量个数” 的关系
  19. R7 7735HS参数 锐龙77735HS怎么样相当于什么水平级别
  20. 秀技能:倒立及其他没用的

热门文章

  1. Spirng 痛苦源码学习(一)——总起spring(一)
  2. ubuntu系统安装手机驱动问题
  3. 如何将微信聊天记录转移到其他手机上
  4. 编译Android下可执行命令的FFmpeg
  5. 学习SPRING在春天 - Learn Spring in spring(二)
  6. Java线程安全集合
  7. 十进制转二进制C语言版
  8. 【自动驾驶——摄像头去畸变】
  9. 【EOS钱包开发 一】EOS不得不说的一些概念
  10. BPMN术语中英文对照表