ref:如何在大量jar包中搜索特定字符
阿新 • • 發佈:2018-06-26
www 字符 進入 TP 需要 進行 說明 表達 支持
歡迎關註我的社交賬號:
博客園地址: http://www.cnblogs.com/jiangxinnju/p/4781259.html
GitHub地址: https://github.com/jiangxincode
知乎地址: https://www.zhihu.com/people/jiangxinnju
郵箱: [email protected]
工作中定位某些問題時需要在jar包中搜索某些特定的字符。如果jar包數量比較少可以直接使用JD-GUI等反編譯軟件導出源碼,但是如果jar包數目龐大,這種方式工作量就太大了。
現在介紹一種相對簡單的方法,這種方式需要三種工具:
- 能夠批量解壓jar包的程序,比如WinRAR。
- 能夠批量反編譯jar包或者class文件的程序,比如jad(jd不支持命令行)。
- 能夠批量搜索文本文件的工具,比如FileLocator。
具體步驟:
假如需要在D:\jar\目錄中的所有jar包中搜索Calendar一詞:
首先需要利用WinRAR將所有jar包解壓到獨立的目錄中:
打開命令行窗口,進入D:\jar\目錄,輸入下面命令(假設jad工具已經在path中設置):
jad -o -r -sjava -dsrc ./**/*.class
會發現在該目錄多了一個src目錄。
註:反編譯輸出中經常會出現類似於The class file version is 49.0 (only 45.3, 46.0 and 47.0 are supported)的內容,說明jad只能編譯49.0以下版本的class文件,雖然可以生成java文件,但是並沒有正確反編譯,如果大家知道其他可以在命令行執行,且不會出現類似問題的反編譯工具可以告訴我。當然有一個比較折中的辦法是使用我寫的一個批量修改class文件版本號的小程序(通過郵件與我聯系),通過修改版本號將class文件偽裝成低版本的,供jad讀取,但是這種方式不支持高版本的特性,比如拉姆達表達式。
然後使用FileLocator進行搜索即可。
ref:如何在大量jar包中搜索特定字符