从jar包还原出java源码(项目文件)
原文转载至:https://blog.csdn.net/mxmxz/article/details/73043156
上周接到个新任务,一个遗留的接口工程需要改造,然而根据前任开发留下的文档看,这个工程没有代码,只有生产环境的jar包供使用。。边吐(咒)槽(骂)边在SVN服务器上四处翻找,想找到这个工程的源码,毕竟没源码怎么跑起来这个工程?不能跑起来怎么改造调试?
确认真的找不到源码之后。。冷静下来开始研究这个前辈留下的坑
0. get jar包
从生产环境down下来jar包,打开看了一眼:
黑人问号脸。。这是啥?为什么jar包里面还有java文件?还有这种操作?
1. 初次尝试
把jar包的内容解压出来之后,就想把所有的class文件删掉,只留下java文件,这样不就get了源码?
结果发现想的太简单了,从上面的截图就能看出,class文件在2010年的5月25号有更新,而java文件是2010年3月31号更新的,这就说明class文件比java文件更新,所以这些java文件都是过期的。。【坑啊
2. 再次尝试
如果只有一个class文件,怎么查看java代码这个很简单,平时用JD-GUI或类似的反编译工具就可以了,但印象中只能一个文件一个文件的看,我手里有一个jar包可怎么还原源码导进MyEclipse啊。。
去google了半天,都没有找到好的答案(事后发现了答案,和我的做法相同)
一阵沮丧,然后无聊打开了JD-GUI,打开jar包后,随手点到了左上角的File,咦??
发现了一个save!一阵兴奋,然后点了保存试了一下,发现导出来的zip文件就是反编译后的整个源码!
3. 小问题
打开zip文件看了一眼,发现:
因为jar包里面有同名的class文件和java文件,导出来的反编译源码也保留了旧的java文件在里面(从文件时间可以看出)
4. 解决小问题
这里用了压缩软件的命令,我平时用的是7-ZIP,简单搜索学习了一下,步骤如下:
a. 将7-ZIP的目录配置到系统环境变量(PATH)中
b. 打开命令行,到jar包所在目录
c. 执行命令
- 7z d xxx.jar *.java -r
效果如图:
5. 重新保存源码
删除了原jar包中的java文件后,再次用JD-GUI保存反编译源码文件,搞定
6. 最后
欢声笑语中获得了源码后,发现想启动这个项目还有些小麻烦,不过跟不知道怎么从jar包还原出工程源码相比,都是小问题了!
从jar包还原出java源码(项目文件)的更多相关文章
- 下载外部jar包后,链接源码和javadoc.jar
今天下载了一个Apache Common的一个jar包,对于引入源码和JavaDoc有了新的认识,在这里记录一下. Binaries是指二进制文件,包含使用的jar包.Source是指源码. xxx. ...
- [转载]为什么jar包中能看见源码
[转载]为什么jar包中能看见源码 这个也是我之前发现过的一个现象,只是之前没有研究过.今天正好在知乎看见,总结一下: 对于Maven或者Gradle项目,依赖的部分会自动从远程仓库下载源码 生成的j ...
- Eclipse中如何快速查看jar包中 的class源码
我们查看jar源码时,一般是安装个jd-gui,把jar拷出来,然后从jd-gui中打开jar再查看源码,这个过程不免有些麻烦,当然,本篇所讲的快速查看的方法也没什么高科技手段,只是将jd-gui集成 ...
- 【记录】eclipse jar包看不了源码
第一步:下载JAD . jad官方地址的官方下载地址是: http://www.softpedia.com/get/Programming/Debuggers-Decompilers-Dissasem ...
- java编程思想第四版中net.mindview.util包下载,及源码简单导入使用
在java编程思想第四版中需要使用net.mindview.util包,大家可以直接到http://www.mindviewinc.com/TIJ4/CodeInstructions.html 去下载 ...
- Java 源码学习线路————_先JDK工具包集合_再core包,也就是String、StringBuffer等_Java IO类库
http://www.iteye.com/topic/1113732 原则网址 Java源码初接触 如果你进行过一年左右的开发,喜欢用eclipse的debug功能.好了,你现在就有阅读源码的技术基础 ...
- 记录一下通过分析Tomcat内部jar包找出request.getReader()所用的字符编码在哪里设置和起效的完整分析流程
前言: 之前写Java服务端处理POST请求时遇到了请求体转换成字符流所用编码来源的疑惑,在doPost方法里通过request.getReader()获取的BufferedReader对象内部的 R ...
- 使用eclipse阅读java源码
很多时候想要阅读java源代码(无论是jdk自带的,还在第三方的),但是我们使用的jar包都是编译好的class包,无法在eclipse中直接打开,此时需要下载源码包. 本文以查看HttpClient ...
- 【JDK命令行 一】手动编译Java源码与执行字节码命令合集(含外部依赖引用)
写作目标 记录常见的使用javac手动编译Java源码和java手动执行字节码的命令,一方面用于应对 Maven 和 Gradle 暂时无法使用的情况,临时生成class文件(使用自己的jar包):另 ...
随机推荐
- php 易忽略问题
- Android中Parcel的分析以及使用
简单点来说:Parcel就是一个存放读取数据的容器, Android系统中的binder进程间通信(IPC)就使用了Parcel类来进行客户端与服务端数据的交互,而且AIDL的数据也是通过Parcel ...
- 无监督︱异常、离群点检测 一分类——OneClassSVM
OneClassSVM两个功能:异常值检测.解决极度不平衡数据 因为之前一直在做非平衡样本分类的问题,其中如果有一类比例严重失调,就可以直接用这个方式来做:OneClassSVM:OneClassSV ...
- vue 之 .$mount()
$mount():手动挂载 当Vue实例没有el属性时,则该实例尚没有挂载到某个dom中: 假如需要延迟挂载,可以在之后手动调用vm.$mount()方法来挂载.例如: <div id=&quo ...
- HDU 3546
http://acm.hdu.edu.cn/showproblem.php?pid=3546 题意:10个寄存器初值为1,有加乘赋值运算,最多30w次运算,大数最多5000位,问最后10个寄存器的结果 ...
- 读博 在没有导师PUSH的情况下该何去何从?
读博已有两月之久,与导师也是仅有的一面之缘,短短数分钟谈话大致总结便是看看基础知识,再然后就没有什么了,突然之间有些小懵逼.突然间感慨这就是我的博士生涯的生活,这就没有啦,以后就这么过啦?在读博士之前 ...
- BZOJ4310: 跳蚤 【后缀数组+二分】
Description 很久很久以前,森林里住着一群跳蚤.一天,跳蚤国王得到了一个神秘的字符串,它想进行研究.首先,他会把串 分成不超过 k 个子串,然后对于每个子串 S,他会从S的所有子串中选择字典 ...
- Windows 10中更新Anaconda和第三方包
=============================== 作为专业的Python开发者,Anaconda包肯定很熟悉 下面总结一下Anaconda的升级和维护 步骤一: 打开cmd,切换到Ana ...
- 东北林业大学第12届ACM(打表)
东北林业大学第12届ACMhttps://www.nowcoder.com/acm/contest/45#question F题和K题对大数运算的转化 首先F题,由于测试数据为接近10的100次方的大 ...
- M端计算rem方法
(function(){var a=document.documentElement.clientWidth||document.body.clientWidth;if(a>460){a=460 ...