jar file mit xml dateien in eclipse

Status
Nicht offen für weitere Antworten.

mephi

Bekanntes Mitglied
Hi,

ich arbeite mit eclipse an einem Projekt für die FH. Wir haben ein Projekt + CVS und mussten ein kleines Spiel erweitern. Im Projekt-Ordner ist ein ordner src in dem dann die packages sind ala game oder cards. das problem ist nur wenn ich eine jar file erstelle und die danach ausführe, findet er die xml dateien einfach nicht.

kennt jemand das problem?
 
Greifst du auch richtig auf die Datei zu (i.e. über den Classloader)?
Hast du sie auch mit exportiert?
 
die beiden xml dateien sind mit im verzeichnis. das spiel funktioniert auch wenn ich es per eclipse starte

der zugriff erfolgt so:

Code:
XMLReader parser = XMLReaderFactory.createXMLReader();
            parser.setContentHandler(handler);
            parser.parse("src/cards/bilder/cards.xml");
 
So wird das nichts.
Ist schonmal ungünstig Resourcen in das Source Verzeichnis zu legen. Besser in ein eigenes Verzeichnis.
Dann musst du Eclipse mitteilen das du dieses Verzeichnis mit exportieren willst.
Laden kannst du Dateien im jar dann über getClass().getResource
 
Der Unterschied ist das jar.
In den meisten jars ist der src Ordner nicht vorhanden, und die Funktionalität eines Programms sollte nicht davon abhängig sein ob der Quelltext exportiert wurde.
Und die Sache mit dem Classloader muss eben so sein, weil man anders nicht auf Dateien zugreifen kann die im jar liegen.
 
ok. aber wie wird dann aus dem objekt vom typ URL/InputStream ein objekt vom typ InputSource?

ich kann ja weiterhin den handler benutzen!?

Code:
URL test = ClassLoader.getSystemClassLoader().getResource("cards.xml");

so hab ich das mal zum test angelegt

jar file und xml sind leider totales neuland
 
Na InputSource hat doch einige Konstruktoren. Such dir einen aus.
zB:
Code:
new InputSource(getClass().getResourceAsStream("cards.xml"));
 
ok problem gelöst. dadurch hab ich aber ein andres problem

man soll ja möglichst so programmiern dass man das programm leicht verändern kann.

momentan wird aus der xml der pfad zu den bildern der karten ausgelesen. nun hängt der pfad ja davon ab wo ich den "link" dann verwende? also in welchem package...

edit:
das ganze projekt is nicht sonderlich schön programmiert.. hat ein studi ausm 3.sem für uns gemacht. und wir durften uns in einer blockwoche daran austoben. daher bin ich leider an einige sachen gebunden 🙁 wie den aufbau mit der xml
 
Der Classloader durchsucht deinen Classpath um die Resource aufzutreiben.
Das übliche Vorgehen ist wie gesagt eine Folder auf gleicher ebene wie source, zB resources.
Beispiel:
Code:
getClass().getResource("/resources/images/myImage.gif");
Diese Zeile funktioniert dann von überall.
 
achja. so wie du das geschrieben hast geht es nicht. es geht nur wenn ich dann das /resources/ weg lass
aber was ist wenn ich dann noch einen ordner zB /alt/bilder/ hab indem vielleicht eine xml mit selben namen liegt?

also die struktur sieht nun in etwa so aus:
-src
|
--cards
--game
--gui
-resources
|
--bilder
--lang
 
nun steh ich total auf dem schlauch..

ich hab /src/cards/CardStack.java .. in der ruf ich zB die xml aus /resources/bilder/cards.xml auf. und außerdem /resources/bilder/bild.png was auch im CardStack und in anderen Klassen aufgerufen wird.

src und resources liegen im projektordner

aber

Code:
img = ImageIO.read(getClass().getResourceAsStream("/bilder/bild.png"));

geht nur so.. ohne /resources/
das stört mich.
 
ähm es liegt im projektordner..

classpath kenn ich nur von den umgebungsvariablen /Library/Java/Home
 
Dann passt's soweit.
Sorry, war mein Fehler. Der eigentliche source Folder gehört nicht mehr zum Pfad, also ist /bilder/bild.png korrekt.
 
d.h. es kann theoretisch zu konflikten kommen wenn man zB /resources/datei.bla und /src/datei.bla hat?

hmmmm
 
ja stimmt schon ^^
wollt ich nur des verständniss wegen wissen..

wenn ich was benutz hab ich die angewohnheit über alles bescheid wissen zu wollen 🙂
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben