4

我正在尝试从特定的 WAR 文件加载非 Java 资源。这就是我试图实现这一目标的方式:

SomeClassInMyWarFile.class.getClassLoader().getResource("path/file.txt");

在 JBoss 4 中运行时完美运行 - 其中 getClassLoader() 返回WebAppClassLoader.

但是当我尝试在 JBoss 6 下运行此代码时,我得到一个 的实例BaseClassLoader,作为回报,它无法在该 WAR 中找到资源。

出于调试目的,当我在两者上调用 getResource("./") 时,结果如下:

  • JBoss 4

    "file:/C:/path/to/my/WarFile.war/"
    
  • JBoss 6

    "file:/C:/jboss6/bin/a1k2347-kpm5pr-hjfoi81u-1-hjfoj582-dz/"
    

    “/a1k2347-kpm5pr-hjfoi81u-1-hjfoj582-dz/”甚至不存在。

我觉得我没有正确设置我的 jboss6,或者我在这里遗漏了另一件重要的事情。有什么想法会发生什么吗?或者甚至是能够解释我做错了什么的人?

4

1 回答 1

4

好的,似乎我对 WAR 文件应该如何工作没有一些基本的了解。

在我理解只有WEB-INF/classesandWEB-INF/lib被添加到类加载器的类路径后,而不是WAR 文件的根目录中,解决问题非常简单:

作为快速修复,我更改path/file.txt../../path/file.txt,因此资源的路径是相对于WEB-INF/classes

这确实很丑陋。有一天,我会花一些时间来增强我们的构建过程,因此资源会自动移动到类路径上的目录中。

于 2013-07-24T11:19:08.860 回答