2010-01-15 13 views
7

Unser Projekt in Eclipse etwa zeigt die folgenden Ordner:Eclipse-: Export in .jar und umfassen Ressourcendateien (ANT)

application 
    - src 
    - JRE System Library [1.6] 
    - Referenced Libraries 
    - lib 
    - rsc 

In unserem Projekt möchten wir Datei> Exportieren verwenden ...> Executable JAR

Nun, das funktioniert gut, mit einer Ausnahme: Wenn wir unsere application.jar ausführen wollen, müssen wir noch den Ordner rsc/am gleichen Ort wie application.jar kopieren.

In rsc/haben wir andere Ordner für die Trennung der verschiedenen Teile. Grundsätzlich , laden wir die Stücke mit dem Code (auch ein wenig verändert, aber der Pfad Stil ist korrekt)

strUrl = "file:rsc/properties/Constants.properties"; 
url = new URL(strUrl); 
ImageIcon icon = new ImageIcon(url); 

ich auf rsc /> Build Path> Verwendung als Quellordner der rechten Maustaste können.

Das funktioniert aber auch nicht, weil Eclipse den rsc-Ordner nicht automatisch in den bin/-folder kopiert. Und dann können wir es nicht mehr aus Terminal (nicht in Glas verpackt)

EDIT: Warum ist Eclipse nicht in der Lage, dies richtig zu behandeln? Warum hat es Probleme mit "verschachtelten" Ausgabeordnern? Auf der Registerkarte Source des Dialogfelds Build Path konnte ich problemlos den Ordner rsc/-folder mit dem Ausgabeordner auf bin/rsc/hinzufügen, aber es scheint nicht möglich, verschachtelte Ordner zu platzieren ...


BEARBEITEN 2: Jetzt konnte ich eine XML-Datei erstellen, um das Zeug mit Ameisen zu bauen, und schaffte es irgendwie, den rsc-Ordner direkt in das Glas einzuschließen. Läuft immer noch nicht wegen der gleichen Fehler. Muss ich wirklich die Ressourcenpfade überprüfen, ob sie in einer JAR sind oder nicht? Der Inhalt der JAR ist nun folgendes:

META-INF/ 
META-INF/MANIFEST.MF 
configurator/ 
controller/ 
editor/ 
gui/ 
logic/ 
networking/ 
rsc/ 
rsc/gamesettings/ 
rsc/levels/ 
rsc/pics/ 
rsc/properties/ 
util/ 

aber Java hasst mich immer noch und wirft java.io.FileNotFoundException: rsc/properties/Constants.properties mit einem stacktrace von rund 100 Zeilen.


jemand eine idee wie es geht? thx & grüße

Antwort

15

Wenn Sie rsc als Quellordner markieren Eclipse kopiert seinen Inhalt in das Ausgabeverzeichnis. Oder Sie könnten einfach rsc unter src verschieben, wenn Sie die Ressourcen in der Ausgabe gruppieren möchten.

Dann können Sie Class.getResource("/properties/Constants.properties") oder Class.getResource("/rsc/properties/Constants.properties") verwenden, und es funktioniert unabhängig davon, ob Ihre App als Jar verpackt ist oder von der Quelle ausgeführt wird.

Als eine Nebenbemerkung funktioniert das file: Protokoll nur mit normalen Dateien, um auf Dateien innerhalb des Kruges zuzugreifen, müssten Sie etwas wie new URL("jar:file:app.jar!/rsc/properties/Constants.properties") verwenden.

+0

Ja. Dies war die Lösung, aber das Markieren von rsc/as src-Ordner in Eclipse funktioniert nicht. Ein anderer Student hat mich gleich zur Lösung geführt. Das Problem war, dass wir Class.getResource ("...") benutzen mussten, den Pfad vorangestellt mit einem '/'. thx und grüße – Atmocreations

+0

Sorry, was meinst du mit 'Class # getResource()'? Es gibt keine solche statische Methode in der Klassenklasse. – m0skit0

+0

@ m0skit0 Die Methode ist nicht statisch, Entschuldigung für die Verwirrung. –

2

Für diese Art der Verwendung würde ich empfehlen, Maven, die das automatisch beim Erstellen eines Glases tut. Es gibt sogar an Eclipse plugin.

Sie könnten auch Ant verwenden.

+0

thx, ich weiß, dass diese Art von Tools existieren. Aber ich habe keine Erfahrung mit ihnen und meine Meinung ist, dass, wenn Eclipse ein Werkzeug zur Verfügung stellt, um ausführbare Jars zu erstellen, ich denke, es sollte möglich sein, einfach einen anderen Ordner zum Jar hinzuzufügen, ohne es zu modifizieren. – Atmocreations

4

Sie könnten versuchen: Wechseln Sie im Dialogfeld "Java-Buildpfad" zur Registerkarte "Bibliotheken" und wählen Sie "Klassenordner hinzufügen ...". Wählen Sie rsc aus dem Dialogfeld Klassenordnerauswahl. Der Inhalt des Verzeichnisses rsc wird nun in der ausführbaren JAR-Datei enthalten sein.

(Beachten Sie, dass rsc selbst wird nicht enthalten sein, so dass Sie ein neues Unterverzeichnis unter rsc hinzufügen müssen können die Verzeichnisstruktur in das Glas richtig zu machen.)

+0

THX für Ihre Antwort. Nun ja, das würde funktionieren. Aber das Problem ist, dass ich diese Objekte nicht in rsc/rsc/verschieben kann, weil der lokale Lauf (ohne die Erstellung der JAR-Datei) nicht mehr funktioniert ... – Atmocreations

1

ich dies tun in der Regel von Hand, in Ihrem Fall jar -uf foo.jar rsc enthält alle Ihre Ressourcen. Sie können ein Skript schreiben oder diese

1

in ant tun, wie Sie in Edit 2 sagen, dass Sie alle in einem Glas haben, sollte diese Arbeit:

String path = "rsc/img/img.gif"; 
URL url = this.getClass().getResource(path); 
ImageIcon icon = new ImageIcon(url); 
+0

Danke für Ihre Antwort. Ich muss sagen, dass "this.getClass()" befindet sich in src/util/ Wird es versuchen – Atmocreations