从tomcat访问jar文件

jul*_*ian 1 java jsp tomcat jar classpath

他在那里,

现在已经卡住了一段时间.我试图做的事情归结为:

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

来源:

        InputStream in = ClassLoader.getSystemResourceAsStream("json2/json.js");
Run Code Online (Sandbox Code Playgroud)

当我在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]);
        }
Run Code Online (Sandbox Code Playgroud)

使用经典的java-class,它只生成我的main-class-file.在tomcat中它显示了"tomcat/lib"目录的内容.

有任何想法吗?我将不胜感激......


编辑

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

SParser.class.getClassLoader().getParent().getResource("")
Run Code Online (Sandbox Code Playgroud)

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

Bal*_*usC 6

不要用getSystemResourceAsStream().使用getResourceAsStream().在Tomcat webapp环境中,系统类加载器不了解Tomcat/libwebapp库.

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

ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
InputStream inputStream = classLoader.getResourceAsStream("/json/json.js");
Run Code Online (Sandbox Code Playgroud)