如何从嵌入式JAR文件加载资源

时间:2011-04-09 01:46:49

标签: java jboss jar classloader

我正在尝试加载嵌入式JAR文件中包含的资源。该项目实际上使用具有以下结构的JBoss文件部署在EAR中:

deploy.ear
|
|-> project.sar
    |
    |-> sub_project.jar
    |   |
    |   |-> settings.xml
    |
    |-> com/path/project/
        |
        |-> main.class

main.java我想InputStream获得settings.xml。这样做的正确方法是什么?

我目前的理解是以下代码应该有效,但它正在返回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");

1 个答案:

答案 0 :(得分:2)

这可能是一个很好的资源:http://one-jar.sourceforge.net/version-0.95/

主要思想是内部JAR不会被自动加载外部JAR的ClassLoader加载,您需要手动执行此操作,例如:使用StreamClassLoader加载内部jar

只有这样,您可以使用getResourceAsStream(...)

从自己的ClassLoader中获取该资源
相关问题