2011-03-30 131 views
1

他在那裏,從tomcat訪問jar文件

現在已經停留了一段時間。什麼即時通訊試圖做到這一點:

  • 我已經開發了一個小的庫,我部署在一個jar文件的形式。它包含我需要訪問的文件,它位於「json2/json.js」(是,doin jscript/rhino東西)
  • 我將jar文件導入經典的java-project,它工作正常。文件被發現,閱讀
  • 我導入同一JAR文件到Tomcat的項目,如下所示:
  • 調用Java的類我把我的庫中一個Java類
  • 一個.JSP ,它位於在Tomcat/LIB-目錄
  • 現在當我嘗試訪問我不能該文件(空指針)

來源:

 InputStream in = ClassLoader.getSystemResourceAsStream("json2/json.js"); 

當我運行它內部的tomcat,(在== null)。

診斷我即興如下:

 File fu = new File(new URI(this.getClass().getClassLoader().getResource("").toString())); 
     String[] l = fu.list(); 
     for (int i = 0; i < l.length; i++) { 
      System.out.println(i+"||"+l[i]); 
     } 

與經典的Java類僅能生產我的主類文件。在tomcat中它向我顯示了「tomcat/lib」目錄的內容。

有什麼想法?將不勝感激......


編輯

一個細節,我忘了添加(和真正研我的齒輪):

SParser.class.getClassLoader().getParent().getResource("") 

與空PTR出現。跆拳道?即使沒有訪問特定的資源,仍然沒有結果。

+0

你在哪裏把你的jar放在tomcat中?在您的應用程序的WEB-INF/lib中? – sudocode 2011-03-30 13:48:30

+0

因此,json2/json.js位於tomcat/lib文件夾中的jar文件中? – 2011-03-30 13:49:03

+0

jar文件位於tomcat/lib目錄中,裏面是文件(json2/json.js)。 – julian 2011-03-30 13:51:54

回答

6

請勿使用getSystemResourceAsStream()。使用getResourceAsStream()。在Tomcat的webapp環境中,系統類加載器不知道Tomcat/lib和webapp庫。

此外,抓住ClassLoader時,最好抓住當前線程的上下文類加載器。

​​
+0

感謝您的幫助。我喜歡你的推理,並改變了我所有的電話,仍然存在問題... – julian 2011-03-30 14:36:39

+0

我更新了答案。你可能有錯誤的類加載器。 – BalusC 2011-03-30 14:45:34

+0

做了伎倆...謝謝你一百萬次!喝一杯啤酒,感覺真棒。好極了! – julian 2011-03-30 15:03:00

0

將JAR文件放入應用程序的WEB-INF/lib目錄中。

+0

感謝您的答案,不幸的是它沒有工作。同樣的問題。 tomcats找到.jar文件,因爲上面的source-sample都已經在jar文件中。所以它只能找到來自同一個檔案庫的資源!?!??! – julian 2011-03-30 13:59:02