【问题标题】:Load non-Java resource from WAR从 WAR 加载非 Java 资源
【发布时间】:2013-07-21 06:11:24
【问题描述】:

我正在尝试从特定的 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,或者我在这里遗漏了另一个重要的事情.. 任何想法可能会发生什么?或者甚至是能够解释我做错了什么的人?

【问题讨论】:

    标签: web-applications jboss classloader java


    【解决方案1】:

    好吧,我好像对 WAR 文件应该如何工作的一些基本了解。

    了解了classloader的classpath中只添加了WEB-INF/classesWEB-INF/lib,而NOT是WAR文件的根目录,解决问题就很简单了:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-11-13
      • 2011-03-19
      • 1970-01-01
      • 2011-12-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多