1. 程式人生 > >ref:如何在大量jar包中搜索特定字符

ref:如何在大量jar包中搜索特定字符

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包中搜索特定字符