快速找出類別所在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版。

##

您可能也會有興趣的類似文章

簡睿

服務於軟體業的資訊老兵。興趣廣泛,學習力佳,樂於分享所知所學。

您可能也會喜歡…

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *