Resourcen aus Jar-Archiv laden

multiholle

Aktives Mitglied
Ich habe SQL-Dateien und PNG-Dateien, die ich zur Laufzeit mit folgenden Befehlen lade:
Java:
InputStream sqlFile = getClass().getResourceAsStream("query.sql");
URL imgURL = IconFactory.class.getResource("icon.png");
Die Dateien liegen im "res"-Quellordner an gleicher Stelle wie die Klassen im "src" Quellordner. Ich bekomme beim Laden der Dateien einen Fehler, dass die Datei nicht gefunden wurde. Das Problem tritt allerdings nur auf, wenn ich mein Projekt in eine Jar-Datei packe. In Eclipse funktioniert alles Problemlos. Woran liegt das?

Ich habe in der Jar-Datei nochmal nachgesehen: Die Dateien liegen wirklich drin.
 

yaster

Mitglied
Schau mal in die JAR rein. Es kann sein, dass die Datein, beim Build nicht berücksichtig werden, oder in den Ordner "res" geschmissen werden.

Sollten im Ordner "res" liegen, musst du nur die Pfade anpassen; "res/query.sql" bzw. "res/icon.png".

Eventuell musst du in Eclipse (kenne mich mit der IDE nicht so gut, benutze IDEA), *.png und *.sql als Ressourcen eintragen.
(Ich nehme an, du machst den Build mit Eclipse)
 

multiholle

Aktives Mitglied
Eventuell musst du in Eclipse (kenne mich mit der IDE nicht so gut, benutze IDEA), *.png und *.sql als Ressourcen eintragen.
Was meinst du damit?

Ich erstelle die Jar-Datei mit Ant und folgendem Script. Die Dateien liegen wirklich im src Verzeichnis.
[xml]<project name="Notenverwaltung" basedir="." default="main">
<property name="build.dir" value="release"/>

<target name="clean">
<delete dir="${build.dir}"/>
<echo message="cleaned build directory"/>
</target>

<target name="copy_sources">
<copy todir="${src.dir}/${current}">
<fileset dir="src/${current}"/>
<fileset dir="res/${current}"/>
</copy>
<copy todir="${src.dir}/common">
<fileset dir="src/common"/>
</copy>
</target>

<target name="switch_to_server">
<property name="current" value="server"/>
<property name="src.dir" value="${build.dir}/server/src"/>
<property name="classes.dir" value="${build.dir}/server/bin/classes"/>
<property name="jar.dir" value="${build.dir}/server/bin"/>
<property name="main-class" value="server.Server"/>
<echo message="building server"/>
<antcall target="build"/>
</target>

<target name="switch_to_client">
<property name="current" value="client"/>
<property name="src.dir" value="${build.dir}/client/src"/>
<property name="classes.dir" value="${build.dir}/client/bin/classes"/>
<property name="jar.dir" value="${build.dir}/client/bin"/>
<property name="main-class" value="client.Client"/>
<echo message="building client"/>
<antcall target="build"/>
</target>

<target name="compile" depends="copy_sources">
<!-- server -->
<mkdir dir="${classes.dir}"/>
<javac srcdir="${src.dir}" destdir="${classes.dir}">
<classpath>
<pathelement location="lib/table_layout.jar"/>
</classpath>
</javac>
</target>

<target name="jar" depends="compile">
<!-- server -->
<mkdir dir="${jar.dir}"/>
<jar destfile="${jar.dir}/${current}.jar" basedir="${classes.dir}">
<manifest>
<attribute name="Main-Class" value="${main-class}"/>
</manifest>

<zipfileset excludes="META-INF/*.SF" src="lib/mysql_connector.jar"/>
<zipfileset excludes="META-INF/*.SF" src="lib/table_layout.jar"/>
</jar>
<delete dir="${classes.dir}"/>
</target>

<target name="copy_files">
<copy file="res/${current}/${current}.properties" todir="${build.dir}/${current}"/>
<copy file="res/${current}/${current}.sh" todir="${build.dir}/${current}"/>
<copy file="res/${current}/${current}.bat" todir="${build.dir}/${current}"/>
<copy file="res/${current}/keystore" todir="${jar.dir}"/>
<copy file="res/${current}/truststore" todir="${jar.dir}"/>
<copy file="res/${current}/${current}.sh" todir="${build.dir}/${current}"/>
</target>

<target name="build" depends="jar, copy_files"/>

<target name="main">
<antcall target="clean"/>
<antcall target="switch_to_server"/>
<antcall target="switch_to_client"/>
</target>
</project>
[/xml]
 

yaster

Mitglied
Du solltest deine Ressourcen gleich in das ${jar.dir} kopieren. Java kompilliert (so weit ich weis) wirklich nur die .java Dateien und legt die entstanden Klassen in ${classes.dir}

Versuch es mal mit:
[xml]
<target name="copy_sources">
<copy todir="${src.dir}/${current}">
<fileset dir="src/${current}"/>
</copy>
<copy todir="${classes.dir}/${current}">
<fileset dir="res/${current}"/>
</copy>
<copy todir="${src.dir}/common">
<fileset dir="src/common"/>
</copy>
</target>
[/xml]

Natürlich solltest du ${classes.dir} dann nicht erst im Target "compile" deklarieren.

Edit: jar.dir in classes.dir geändert.
 
Zuletzt bearbeitet:

mvitz

Top Contributor
Ist Richtig. javac kompiliert nur .java Dateien und lässt den Rest aus. Einfach per copy die benötigten Ressourcen mit in das Verzeichnis, aus dem das JAR generiert wird kopieren. Aus diesem Sinne macht es dann z.B. auch Sinn ein eigenes Verzeichnis für Ressourcen zu nutzen.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
Drachenbauer Wie sorge ich dafür, dass mein Spiel die ini-Datei in der Resourcen-ordner des Projektes schreibt? Allgemeine Java-Themen 5
M Resourcen im Jararchiv nicht abrufbar Allgemeine Java-Themen 7
J Resourcen waehrend der Laufzeit aendern? Allgemeine Java-Themen 9
M Input/Output Mehrere Bilder aus Resourcen auslesen Allgemeine Java-Themen 8
Grejak 2D-Grafik Resourcen laden Allgemeine Java-Themen 4
KrokoDiehl Viele JARs und deren Resourcen Allgemeine Java-Themen 9
DeeDee0815 Resourcen in JARs auslagern Allgemeine Java-Themen 4
oliver1974 Zugriff auf externe .class Dateien (und resourcen) aus JAR Allgemeine Java-Themen 11
S Resourcen sparend Allgemeine Java-Themen 5
S classloader + jar + resourcen in dem jar Allgemeine Java-Themen 4
K Problem mit ClassLoader - Laden von Resourcen aus Jar's Allgemeine Java-Themen 14
N Resourcen aus jar Datei. Allgemeine Java-Themen 5
F Laden von bestimmten Daten aus TAR Archiv Allgemeine Java-Themen 23
J PDF-Datei aus JAR-Archiv in Dateisystem kopieren Allgemeine Java-Themen 1
Seikuassi Input/Output ZipOutputStream erzeugt zu großes .zip-Archiv Allgemeine Java-Themen 3
V Input/Output Swing Icons in Jar Archiv laden Allgemeine Java-Themen 10
C jar Archiv im Programm aus dessen jar extrahieren Allgemeine Java-Themen 2
H JAVA-ARCHIV-PROBLEME - pls help :( Allgemeine Java-Themen 4
D auf Bilder im Jar-Archiv zugreifen Allgemeine Java-Themen 11
T jar Archiv auf Server ausführen Allgemeine Java-Themen 3
J Ordner im Archiv (jar) auslesen Allgemeine Java-Themen 12
trash Das große Problem: .jar Archiv Allgemeine Java-Themen 19
D verschlüsseltes Archiv erstellen Allgemeine Java-Themen 5
Balbes Auf Datei im Dateisystem aus einem jar-Archiv zugreifen Allgemeine Java-Themen 4
B Jar-Archiv Allgemeine Java-Themen 3
B Film aus Java JAR-Archiv extrahieren Allgemeine Java-Themen 4
G ZIP Archiv auf Konsistenz prüfen Allgemeine Java-Themen 2
A Warum hab ich noch nie ein .jar Archiv gesehen? Allgemeine Java-Themen 5
X Klasse aus Jar Archiv laden Allgemeine Java-Themen 3
V Wie kann ich ein Bild in einem Zip Archiv abspeichern? Allgemeine Java-Themen 3
K Zugriff auf eine Datei in einem jar-Archiv Allgemeine Java-Themen 9
G IOExceptions nur bei jar Archiv Allgemeine Java-Themen 4
N Speichern von binären Dateien (Zip-Archiv) per Stream? Allgemeine Java-Themen 6
J Javabibliotheken in Jar- Archiv einbinden Allgemeine Java-Themen 5
G Testdatei im Jar archiv öffnen und reinschreiben Allgemeine Java-Themen 11
M dateien in einer zip datei hinzufügen - Archiv updaten Allgemeine Java-Themen 11
G jar archiv und native klassen (pfad angabe) Allgemeine Java-Themen 2
T jar - Archiv updaten Allgemeine Java-Themen 2
T Klassen samt Methoden aus Jar-Archiv laden macht Problem Allgemeine Java-Themen 9
E Konvertierungen und JAR-Archiv Allgemeine Java-Themen 4
Luma Zip-Archiv auslesen und Entry-Informationen auslesen Allgemeine Java-Themen 3
D Jar-Archiv FAQ - Manifest.... Allgemeine Java-Themen 3
J Problem mit *.jar Archiv Allgemeine Java-Themen 5
J Icon für Jar-Archiv Allgemeine Java-Themen 2
J Problem mit .jar Archiv und Bilder Allgemeine Java-Themen 6
bummerland bilder im jar-archiv? Allgemeine Java-Themen 2
O Maven ein externes jar laden ohne die Applikation neu zu kompilieren Allgemeine Java-Themen 4
E Objekte in einen String packen und wieder laden Allgemeine Java-Themen 5
Tobero .jar Dateine aus einem Ordner laden (Java 16) Allgemeine Java-Themen 5
yakazuqi Fehler beim Laden. JDA (Java Discord API) Allgemeine Java-Themen 1
L Jar Dateien in Classpath laden ab JDK 9+ Allgemeine Java-Themen 11
C Wav-Datei aus Jar laden? Allgemeine Java-Themen 11
H Objekte speichern und laden Allgemeine Java-Themen 10
H Objekte speichern und laden Allgemeine Java-Themen 1
H Objekt speichern und laden Allgemeine Java-Themen 1
H Objekt speichern und laden Allgemeine Java-Themen 1
I Klassen aus Jar-Dateien aus anderem Ordner laden Allgemeine Java-Themen 3
F Arraylist vollständig abspeichern und laden Allgemeine Java-Themen 1
T Compiler-Fehler NoClassDefFoundError beim Laden einer Class Allgemeine Java-Themen 11
temi Java Programm aus einer DB laden und starten Allgemeine Java-Themen 2
I Laden von Informationen aus Dateien: Austauschbarkeit: 2 Dateien sinnvoll? Allgemeine Java-Themen 2
H Laden einer (Resourcendatei) aus einem Jar-File Allgemeine Java-Themen 17
B Von String zu <Objekt> ||Speichern/Laden Allgemeine Java-Themen 17
Developer_X Website HTML Code von HTTPS URL laden Allgemeine Java-Themen 0
L Seite einer Partner Website neu laden Allgemeine Java-Themen 1
RalleYTN Audiolänge einer MP3 Datei erhalten ohne diese vollständig zu laden Allgemeine Java-Themen 15
S Maven Jars dynamisch laden / Plugin-Struktur erstellen Allgemeine Java-Themen 14
X Klassen aus jar in jar Laden Allgemeine Java-Themen 1
X Mehrere booleans in Datei Speichern, Updaten und Laden Allgemeine Java-Themen 1
L Mapdaten laden Allgemeine Java-Themen 10
B Aktuellen Sourcecode aus Browser laden Allgemeine Java-Themen 43
HoloYoitsu Kann .dll nur aus Eclipse heraus laden Allgemeine Java-Themen 7
F Teil eines Bildes laden Allgemeine Java-Themen 1
L JavaFX JavafX externe FXML laden? Allgemeine Java-Themen 4
M Eine Datei im Speicher erneut laden(?) Allgemeine Java-Themen 1
D JAVA Basiertes Spiel aus dem Internet in eigenem Client laden Allgemeine Java-Themen 3
S Allgemeine parallelisierte Loesung um Daten im Hintergrund zu laden..? Allgemeine Java-Themen 6
F Java Native/Shared Library (.so) laden macht Probleme Allgemeine Java-Themen 3
V Input/Output Sound Dateien aus Jar laden Allgemeine Java-Themen 18
V Input/Output Gif Bilder Animiert aus einer Jar laden Allgemeine Java-Themen 4
C BufferedImages in Jar laden. Allgemeine Java-Themen 1
G StackoverflowError beim laden einer FXMML Datei Allgemeine Java-Themen 1
Developer_X Input/Output Serialisiertes Objekt speichern und laden Allgemeine Java-Themen 1
J Arraylist speichern und laden? Allgemeine Java-Themen 5
S Applet in html laden; InvocationTargetException,.. nur warum ? Allgemeine Java-Themen 0
M Klassen Klasse Dynamisch laden und Konstruktor aufrufen Allgemeine Java-Themen 1
A Anderes Fenster neu laden Allgemeine Java-Themen 16
N Daten aus Jar laden Allgemeine Java-Themen 10
N Klasse via ClassLoader laden Allgemeine Java-Themen 2
antonbracke Aus Jar eine Class laden und damit arbeiten! Allgemeine Java-Themen 5
K Input/Output Daten speichern / laden Allgemeine Java-Themen 2
A Class Datei aus Verzeichnis über URLClassLoader laden Allgemeine Java-Themen 2
A mit getClassLoader Bild laden Allgemeine Java-Themen 8
S Speichern/Laden/Hinzufügen/Löschen der Array-Wörter; unerwartete Ausgabe Allgemeine Java-Themen 6
G Native Library / Fehler beim Laden der .so/.dll Datei Allgemeine Java-Themen 17
antonbracke Klassen Klassen gegenseitig laden Allgemeine Java-Themen 4
K Input/Output Im Programm instanzierte Objekte Speichern und laden Allgemeine Java-Themen 3
T Java Klassen aus externer .jar laden und ausführen Allgemeine Java-Themen 3
P Textdatei aus Ressourcen laden. Allgemeine Java-Themen 8
R Java Array speichern & laden Allgemeine Java-Themen 23

Ähnliche Java Themen

Neue Themen


Oben