2011-03-30 100 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