ResourceBundles in Jar-Files

  • Themenstarter Themenstarter Eberon
  • Beginndatum Beginndatum
Status
Nicht offen für weitere Antworten.
E

Eberon

Gast
Hallo zusammen,
ich habe ein Problem mit ResourceBundles in Kombination mit Class-Files:

Java:
String baseName = "HelloWorld";
ResourceBundle rb = ResourceBundle.getBundle(baseName);

dies funktioniert auch, wenn meine HelloWorld.properties Dateien im Classpath liegen.
Nun will ich alles in ein .jar packen, mit diesem Inhalt:

META-INF/
META-INF/MANIFEST.MF
application/
application/helloworld/
application/helloworld/HelloWorld.class
HelloWorld.properties
HelloWorld_de.properties

dies funktioniert auch noch wunderbar.
Nun will ich jedoch zur Übersichtlichkeit die .properties -Dateien in einen eigenen Ordner lang packen, also:

META-INF/
META-INF/MANIFEST.MF
application/
application/helloworld/
application/helloworld/HelloWorld.class
lang/
lang/HelloWorld.properties
lang/HelloWorld_de.properties

Mein Problem nun, gibt es eine Möglichkeit in der MANIFEST diesen neuen Classpath auch innerhalb des jars bekannt zu machen (normalerweise verzweigt ein Classpath in der Manifest nur nach außen).
 
Kannst du nicht
Code:
baseName
anpassen? Wenn diese Resource immer unter /lang liegen soll, also
Code:
String baseName = "lang/HelloWorld";
angeben.

Ansonsten wüsste ich nicht, wie man das im Manifest so flexibel handhaben kann, dass deine Resource mal hier, mal da liegt... (was ich auch nicht für sinnvoll halte).
 
Ja.. für den konkreten fall klappt es so tatsächlich..allerdings macht es mich dann nicht mehr so flexibel wie ich wollte.
Meine Resource-Klasse soll mir die resourcen überall im classpath finden, ohne dass ich mich kümmern muss, wo die properties dateien liegen.. kann ja auch in ner anderen jar sein.. aber leider geht es nicht.

Dann leg ich sie doch lieber ins root-Verzeichnis !

Aber danke für den Vorschlag !
 
Ich will mich nicht als Fachmann für ResourceBundles auftun, aber ich kann mir nicht vorstellen, dass es einen "einfachen" Mechanismus gibt, um Resoucen von "irgendwoher" zu laden. Allein der theoretisch mögliche Fall, dass in mehreren Verzeichnissen / JARs auch gleichnamige Resourcen liegen können, macht das ganze kompliziert.
Meiner Erfahrung nach ist es besser hier eine Struktur rein zu kriegen, sprich irgendwo/-wie festzulegen, wo (und wie) die Resourcen zu sein haben.

Sonst musst du wohl selbst irgendwie deine Resourcen suchen 😉 Ich meine, man kommt an Classpath, an PATH ran, ans Arbeitsverzeichnis ... ist halt Arbeit 🙂
Keine Ahnung ob das ein Muss ist oder den Aufwand wert.
 
Meine Resource-Klasse soll mir die resourcen überall im classpath finden, ohne dass ich mich kümmern muss, wo die properties dateien liegen.. kann ja auch in ner anderen jar sein.. aber leider geht es nicht.
Ist eher eine schlechte Idee da sich namen dann überschatten können. In Java wird dieses Problem durch Packages (die wie Namespaces funktionieren) gelöst. Du versuchst gerade das Package Konzept auszuhebeln. Das heißt nicht, das es nicht möglich ist, du kannst den Classpath auswerten und dann rekursiv alles durchsuchen (mit verschiedenen Strategien für jars, Dateisystem, ...), aber besser ist es die Dateien unter ihrem voll qualifierten Namen anzusprechen und der ist nunmal package + Dateiname.
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben