【发布时间】:2011-08-01 22:08:00
【问题描述】:
我正在尝试加载包含在嵌入式 JAR 文件中的资源。该项目实际上是使用EAR 文件部署在JBoss 中,其结构如下:
deploy.ear
|
|-> project.sar
|
|-> sub_project.jar
| |
| |-> settings.xml
|
|-> com/path/project/
|
|-> main.class
来自main.java,我想为settings.xml 获取InputStream。这样做的正确方法是什么?
我目前的理解是以下代码应该可以工作,但它返回null:
this.getClass().getResourceAsStream("settings.xml");
更新
经过反复试验,以下语句起作用:
getClass().getResourceAsStream("/settings.xml");
getClass().getResourceAsStream("/sub_project.jar/settings.xml");
getClass().getClassLoader().getResourceAsStream("/settings.xml");
getClass().getClassLoader().getResourceAsStream("settings.xml");
getClass().getClassLoader().getResourceAsStream("sub_project.jar/settings.xml");
getClass().getClassLoader().getResourceAsStream("/sub_project.jar/settings.xml");
【问题讨论】:
-
java 类加载器无法从嵌入式 jar 加载资源,因此您的设置将无法正常工作。一罐解决方案解决了这个问题,请参阅 Eran 的回答。
-
不确定 /sub_project.jar/settings.xml 是标准符号。可能是 JBoss 扩展。
-
我很惊讶为什么“settings.xml”失败,而“/settings.xml”工作,但后来我阅读了文档:如果资源名称以“/”开头,它不变;否则,包名会在转换“.”后附加到资源名前。到“/”。 Class.class 这样做,但 ClassLoader.class 没有。今天学到了一些新东西...
标签: java jboss jar classloader