快速找出類別所在jar檔的命令行工具:LibraryFinder
當要在一堆 jar 檔裡找到某個class時,通常我都習慣使用 LibraryFinder 1.3.1,為了更方便操作便建立一個批次檔findjar.bat:
echo PATH CLASS c:\jdk1.7-64\bin\java -jar d:\util\LibraryFinderv1.3.1.jar %1 %2
使用範例:
C:\temp\>findjar d:\project\proj1\libs org.apache.poi.POIOLE2TextExtractor Search result for 'org.apache.poi.POIOLE2TextExtractor' in '.' (1 file) ------------------------------------------------------------------ d:\project\proj1\libs\poi-3.8-beta2-20110408.jar ------------------------------------------------------------------
經常需要找正確的jar檔,經常是在編譯發生 ClassNotFoundException 或 NoClassDefFoundError時才需要使用這個工具,但Java輸出的卻不是類別的形式,而是資料夾的形式:
Exception in thread "main" java.lang.NoClassDefFoundError: org/mortbay/component/LifeCycle at java.lang.ClassLoader.defineClass1(Native Method) at java.lang.ClassLoader.defineClass(ClassLoader.java:800) at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142) at java.net.URLClassLoader.defineClass(URLClassLoader.java:449)
若要用findjar.bat則必須手動把斜線改成點才能正確執行。最後寫了第二版的findjar.bat來解決,讓批次檔自動把 / 轉成 .:
echo PATH CLASS set _CLASS=%2 set _CLASS=%_CLASS:/=.% c:\jdk1.7-64\bin\java -jar d:\util\LibraryFinderv1.3.1.jar %1 %_CLASS%
使用範例:
E:\calendar\libs>findjar org/mortbay/component/LifeCycle Search result for 'org.mortbay.component.LifeCycle' in '.' (1 file) ------------------------------------------------------------------ E:\calendar\libs\.\jetty-util-6.1.26.jar ------------------------------------------------------------------
附記
- LibraryFinder除了能在命令列執行,也是IntelliJ IDEA的外掛。
- LibraryFinder最後一個版本 1.5版打包有點問題,沒辦法用java -jar執行,因此我仍然使用1.3.1版。
##
您可能也會有興趣的類似文章
- [Windows] 刪除特定Java process的方法 (0則留言, 2017/08/02)
- iReport 0.4測試 (0則留言, 2005/02/12)
- [Windows] 比對檔案時間並拷貝較新檔案的命令行作法 (0則留言, 2023/02/10)
- [DOS] 以set指令的替換字串功能來解決資料夾重覆附加的小問題 (0則留言, 2016/03/07)
- [Vista] 設定環境變數SET命令的擴充 (0則留言, 2008/04/19)
- [Batch #4] 用批次檔簡化複雜的指令—直接叫用特定的ms-settings (初學者的命令行#8) (0則留言, 2020/08/15)
- [Batch#2] 三個方便的Windows批次檔範例 (初學者的命令行 #6) (0則留言, 2019/12/26)
- [Batch#1] Windows批次檔-取得系統日期的簡單方法與環境變數字串操作 (初學者的命令行 #5) (2則留言, 2019/12/15)
- 如何用批次指令取得上個月的月份-再修訂版 (12則留言, 2008/10/21)
- 替Prompt加上顏色 (1則留言, 2004/12/03)
- Obsidian Windows批次檔與AutoHotkey 語法高亮的用法 (2則留言, 2024/03/10)
- [Windows] 去除環境變數DATE與TIME內的空白 (0則留言, 2008/04/20)
- 開始使用Cygwin以取代cmd.exe (2則留言, 2007/01/11)
- 在命令提示字元取得目前資料夾路徑的方法—使用set /p|初學者的命令行#10 (0則留言, 2021/04/22)
- [Java] 在jar檔裡搜尋特定類別的工具 (0則留言, 2007/09/03)
Sorry, 很久沒用Google sc…