從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包還原出工程源碼相比,都是小問題了!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM