Hallo Ihr,
im Rahmen der Entwicklung einer Modul-Komponente ("project-app") versuchen wir eine Resource (hier: BeanShell-Skripten), die Teil des Moduls sind (und im "files"-Unterordner des Moduls liegen) über folgende API-Aufrufe zu laden:
public class XXX implements ProjectApp {
@Override
public void installed() {
...
//liefert immer null
script = getClass().getClassLoader().getResourceAsStream("files/" + XXX + ".bsh");
...
}
}
getResourceAsStream liefert dabei immer "null". Warum? (Im Debugging sehen wir eine Instanz des "java.net.FactoryURLClassLoader" ClassLoaders).
Das Modul lässt sich ohne Fehlermeldung installieren. Allein die automatisierte Installation von BeanShell-Skripten bei der Installation der Projekt-Komponente gelingt nicht.
Unsere "module.xml" sieht so aus:
<module>
<name>FirstSpirit Services</name>
<version>4.2.219</version>
<description>FirstSpirit components (web service clients and libraries)</description>
<vendor>XXX</vendor>
<components>
...
...
<!-- FirstSpirit project local resources -->
<project-app>
<name>PageExpire</name>
<description>Project component configuration dialog of page expiration</description>
<class>xxx.xxxxx.fsm.pageexpiry.projapp.PageExpiryApp</class>
<configurable>xxx.xxxxx.fsm.pageexpiry.projapp.PageExpiryConfigurator</configurable>
<resources>
<resource>files/</resource>
<resource>lib/pageexpiry-gui.jar</resource>
</resources>
</project-app>
...
...
</components>
</module>
Die fertige Modulstruktur unter "xxx.fsm" sieht so aus:
/
- files
- XXX.bsh
- lib
- java-libs
- META-INF
- module.xml
- MANIFEST.MF
WICHTIG: Wir stellen fest: wird NUR die PROJECT-APP in der "module.xml" allein notiert (und sämtliche anderen MODULE COMPONENTEN auskommentiert) liefert "getResourceAsStream()" NICHT NULL sondern den InputStream der Resource! Was könnte hier mit dem ClassLoading-Verhalten NICHT ZUSAMMENPASSEN? Auch ein Verschieben der Reihenfolge bringt keine Änderung!
In dem Modul sind unterschiedliche Komponenten enthalten: LIBRARY, SERVICE, PROJECT-APP