Ich habe eine einfache Struktur: Eine Data JAR-Datei, die einen Batch von Daten enthält, und eine Service-JAR-Datei, die einen Dienst unter Verwendung der Daten ausführt. Um die Daten einfach zu ersetzen, habe ich sie getrennt, und der Klassenpfad von service.jar enthält das Verzeichnis, in dem sich data.jar befindet.Zugriff auf Ressourcen aus einer anderen JAR-Datei
Innerhalb der Datei service.jar verwende ich getResource, um die Datendateien zu laden. Dies funktioniert, wenn sich die Datendateien direkt im Ordner befinden, aber fehlschlägt, wenn sie sich in data.jar befinden.
Dies schlägt fehl:
all
+ globalclasspath
| + data.jar
| + mine.properties
+ daemons
+ service.jar
jsvc -cp globalclasspath:daemons/service.jar (...)
MyClass.class.getClassLoader().getResource("mine.properties"); // <-- null
Aber das funktioniert:
all
+ globalclasspath
| + mine.properties
+ daemons
+ service.jar
jsvc -cp globalclasspath:daemons/service.jar (...)
MyClass.class.getClassLoader().getResource("mine.properties"); // <-- not null
Ich will nicht den Classpath ändern (wenn ich es zu etwas ändern kann, generic, die auf dem nicht davon abhängen, Name der Datenjar-Datei), aber ich bin in Ordnung mit dem Ändern der Zeichenfolge getResource (Ich habe versucht,/Data/min.properties und /data.jar/mine.properties vergeblich). Gibt es eine Änderung, die ich vornehmen kann, damit die Ressourcen aus dem Glas geladen werden können?
Sorry, ich bin mit 'getResourceAsStream' eigentlich schon (schrieb ich' getResource' weil ich wasn Ich bin mir keiner Unterschiede bewusst und es schien einfacher zu sein. – Dave