从tomcat访问jar文件

时间:2011-03-30 13:38:15

标签: java jsp tomcat jar classpath

他在那里,

现在已经被困了一段时间。我试图做的事情归结为:

  • 我开发了一个小库,我正在以jar文件的形式部署。它包含一个我需要访问的文件,它位于“json2 / json.js”(是的,doin jscript / rhino东西)
  • 我将jar文件导入到经典的java项目中,它运行正常。找到并阅读文件
  • 我将SAME jar文件导入到tomcat-project中,如下所示: 的
  • 调用java-class的.jsp
  • 在java-class中我调用我的库,它位于tomcat / lib-directory
  • 现在当我尝试访问文件时我不能(空指针)

来源:

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

当我在tomcat中运行它时(in == 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-class它只生成我的main-class-file。在tomcat中它显示了“tomcat / lib”目录的内容。

任何想法?非常感谢...


修改

我忘记添加的一个细节(这真的让我的齿轮磨练):

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

提出了一个null-ptr。跆拳道?我没有访问特定的资源,仍然没有结果。

2 个答案:

答案 0 :(得分:6)

请勿使用getSystemResourceAsStream()。使用getResourceAsStream()。在Tomcat webapp环境中,系统类加载器不了解Tomcat/lib,也不了解webapp库。

此外,在抓取ClassLoader时,最好抓住当前线程的上下文类加载器。

ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
InputStream inputStream = classLoader.getResourceAsStream("/json/json.js");

答案 1 :(得分:0)

将JAR文件放在应用程序的WEB-INF/lib目录中。