So laden Sie eine Ressource aus einer JAR-Datei eingebettet

Ich versuche zu laden eine Ressource, die in einer integrierten JAR-Datei. Das Projekt ist tatsächlich genutzt JBoss mit einem OHR - Datei mit der folgenden Struktur:

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

Vom main.java ich würde gerne eine InputStream für settings.xml. Was ist der richtige Weg, dies zu tun?

Meinem aktuellen Verständnis, dass der folgende code sollte funktionieren, aber es ist wieder null:

this.getClass().getResourceAsStream("settings.xml");

Update

Nachdem einige Versuch und Irrtum, sind die folgenden Anweisungen Arbeit:

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");
  • der java class loader kann nicht geladen werden die Ressourcen von embedded-Gläser, damit Sie Ihre set-up wird nicht funktionieren. Die Glas-Lösung die dieses problem behebt, finden Sie Eran Antwort.
  • Nicht sicher, dass /sub_project.jar/settings.xml ist eine standard-notation. Könnte JBoss-Erweiterung.
  • Ich war überrascht, warum "settings.xml" gescheitert ist, während "/settings.xml" gearbeitet, aber dann habe ich Lesen Sie die Dokumentation: wenn die Ressource-name beginnt mit "/", es ist unverändert; andernfalls wird der package-name vorangestellt, um die Ressource namens nach der Konvertierung von "." auf "/". Class.class tut dies, aber ClassLoader.class nicht. Etwas neues gelernt heute...
InformationsquelleAutor cmcginty | 2011-04-09
Schreibe einen Kommentar