在Tomcat 8的Web应用程序中,Jar中找不到Java资源

时间:2015-08-12 15:36:00

标签: java tomcat jar resources classloader

我有一个在Tomcat 8中运行的Web应用程序,这个Web应用程序war文件包含几个jar(通过Spring框架)。其中一个是名为connector.jar的jar。此connector.jar包含一个接收包名称的方法,该方法检查是否存在某个文件。我确信该文件存在(三重检查它,也在jar文件中),因此在开发中,当作为爆炸jar运行时,它返回true,但是当它被打包在一个罐子里并作为战争部署时Tomcat,它返回false。

请帮助我了解问题所在,以及如何解决或调试它?

方法:

public boolean isPresent(String packageName) {
 return getClass().getClassLoader().getResource(packageName + "index.json") != null;
}

注意:

  • 包名称示例:" com / bla / connector /" (包名称
    不包含前导" /")。
  • 我也使用了class.getResource(),但结果相同。在SO建议 如你所知,在jar中查找资源时不要使用它 错误的类加载器。我在同一场战争中使用ActiveMQ。
  • 代码可以由队列消费者调用。但我不这么认为 我使用ClassLoader的方式有问题。

更新,根据要求提供更多细节:

  • 我使用maven作为构建工具(最新版本),maven构建了战争。我使用默认的maven war布局。 WEB-INF / classes,WEB-INF / lib。 lib文件夹包含所有jar和connector.jar。
  • 方法isPresent位于com.company.HtmlWorker类的connector.jar中。
  • 文件index.json位于包中:com.company.json.account。
  • 记录创建的index.json名称时输出isPresent方法:" com / company / json / account / index.json"

0 个答案:

没有答案