zoukankan      html  css  js  c++  java
  • 从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. 执行命令

    [plain] view plain copy
     
    1. 7z d xxx.jar *.java -r  


    效果如图:

    5. 重新保存源码

    删除了原jar包中的java文件后,再次用JD-GUI保存反编译源码文件,搞定

    6. 最后

    欢声笑语中获得了源码后,发现想启动这个项目还有些小麻烦,不过跟不知道怎么从jar包还原出工程源码相比,都是小问题了!

  • 相关阅读:
    Java8 新特性default
    Java Map操作
    Java List操作
    Java Set操作
    Java集合 List,Set,Map
    Java final,static 关键字
    Java ConcurrentHashMap
    Java Synchronized的用法
    Linux 基本收集
    HashMap 扩容 加载因子
  • 原文地址:https://www.cnblogs.com/mkl34367803/p/8807723.html
Copyright © 2011-2022 走看看