Wie referenziere ich eine Ressourcendatei für JAR und Debugging?
Ich habe ein unangenehmes problem der Referenzierung von Ressourcen, wenn man mit einem Maven-Projekt-und Jar-Dateien...
Habe ich alle meine Ressourcen in einem eigenen Ordner /src/main/resources ist Teil des build-path in Eclipse. Dateien verwiesen wird, mit
getClass().getResource("/filename.txt")
Diese funktioniert in Eclipse, aber scheitert in der Jar-Datei - es werden die Ressourcen in einem Ordner befindet, direkt unterhalb der jar-root...
Kennt jemand ein 'best practice' zum verweisen auf eine Datei in der JAR-und (!) in Eclipse?
Edit:
Das problem ist, dass, während die Ressourcen tatsächlich befinden sich in der JAR in einem Ordner "resources" auf der obersten Ebene, die oben beschriebenen Methode fehlschlägt, die Datei zu finden...
InformationsquelleAutor der Frage Patrick | 2011-05-31
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den Inhalt des Maven resource Ordner kopiert target/classes und von dort auf den Stamm der resultierenden Jar-Datei enthalten. Das ist das erwartete Verhalten.
Was ich nicht verstehe ist, was das problem in deinem Szenario. Verweisen auf eine Ressource durch
getClass().getResource("/filename.txt")
beginnt an der Wurzel des classpath, ob dieser (oder ein element davon)target/classes
oder die JAR-root. Der einzig mögliche Fehler, die ich sehe, ist, dass Sie die falscheClassLoader
.Stellen Sie sicher, dass die Klasse, die verwendet die Ressource ist in der gleichen Artefakt (JAR) als Ressource und tun
ThatClass.class.getResource("/path/with/slash")
oderThatClass.class.getClassLoader().getResource("path/without/slash")
.Aber davon mal abgesehen: wenn es nicht funktioniert, sind Sie wahrscheinlich, etwas falsch zu machen, die irgendwo in den build-Prozess. Können Sie verifizieren, dass die Ressourcen in der JAR?
InformationsquelleAutor der Antwort Sean Patrick Floyd
Ich hatte ein ähnliches problem.
Nach einem langen Tag zu versuchen, jede Kombination und debugging habe ich versucht getClass().getResourceAsStream("resources/filename.txt") und bekam es zu arbeiten, schließlich.
Nichts anderes half.
InformationsquelleAutor der Antwort andjelko
Einmal Verpacken Sie das GLAS in Ihrer Ressource-Dateien sind keine Dateien mehr, sondern streamen, so
getResource
wird nicht funktionieren!Verwenden
getResourceAsStream
., Um die "Datei" - Inhalte, verwenden Sie https://commons.apache.org/proper/commons-io/javadocs/api-release/org/apache/commons/io/IOUtils.html:
InformationsquelleAutor der Antwort Thomas Decaux
Das problem ist, dass in der IDE die getClass().getResource("Pfad"); String ist nicht groß - /KLEINSCHREIBUNG beim Zugriff auf eine Datei, aber beim starten von jar ist es. Überprüfen Sie Ihre Kapitalisierung Verzeichnis im Vergleich zu Datei. Es funktioniert. Auch wenn Sie versuchen, new File(getClass().getResource("Pfad"); die Datei nicht gelesen werden außerhalb der IDE.
InformationsquelleAutor der Antwort Christo Naudé
Wenn Sie das Ressourcen-Verzeichnis in der jar-Datei (so ist es unter /resources-Ordner in die jar, und wenn /src/main ist in deinem build-path in eclipse, dann sollten Sie in der Lage sein, verweisen Sie Ihre Datei als:
Sollte in beiden Umgebungen arbeiten.
InformationsquelleAutor der Antwort Steven Mastandrea
Kopieren Sie einfach die Datei in ein temporäres Verzeichnis.
InformationsquelleAutor der Antwort Juangui Jordán