一尘不染

从tomcat访问jar文件

tomcat

他在那里

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

  • 我已经开发了一个小库,正在以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");

当我在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类,它只会生成我的main-class-file。在tomcat中,它向我显示了“ tomcat / lib”目录的内容。

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


编辑

我忘记添加的一个细节(确实磨碎了我的装备):

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

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


阅读 363

收藏
2020-06-16

共1个答案

一尘不染

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

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

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