Как загрузить ресурс из встроенного JAR-файла - PullRequest
5 голосов
/ 09 апреля 2011

Я пытаюсь загрузить ресурс, содержащийся во встроенном файле 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 Ответ

2 голосов
/ 09 апреля 2011

Это может быть хорошим ресурсом: http://one -jar.sourceforge.net / version-0.95 /

Основная идея заключается в том, что внутренний JAR-файл не загружается ClassLoaderкоторый загрузил внешний JAR-файл автоматически, вы должны сделать это вручную, например, используя StreamClassLoader для загрузки внутреннего JAR-файла

Только тогда, из вашего собственного ClassLoader вы можете получить этот ресурс, используя getResourceAsStream(...)

...