Ressourcen-und config-laden in maven project
Bin ich mit Maven für desktop-applycation. Ich lese über Maven Standard directory layout und ich haben dieses Projekt Struktur für jetzt:
App
|-- pom.xml
`-- src
|-- main
|-- java
| `-- java classes
|-- resources
| `-- images
| `-- app images
`--config
`--config.xml
Möchte ich einen Weg finden, laden meine Ressourcen-und config-Dateien. Ich Lesen Sie einige Artikel und Themen gefunden (Vereinfachtes Beispiel aus meinem code):
//class for loading config
public class Preferences {
public Preferences() {
InputStream image = Preferences.class.getResourceAsStream("images/image.png");
InputStream config = Preferences.class.getResourceAsStream("config.xml");
}
}
Aber Bild-und config-Variablen, die null enthält. Ich versuchte verschiedene Varianten der Beladung (vom root-Ordner, mit diesem.getClass() anstelle von Preferences.class und andere), aber ich habe immer null. Ich verstehe wirklich nicht, diese Ressource laden-system, und ich nicht finden, eine gute Dokumentation darüber. Es wäre schön, wenn jemand gibt eine gute Erklärung über diesen Mechanismus (oder nur einen link auf Google docs).
So, die wichtigste Frage ist: Wie kann ich die Auslastung meiner Ressourcen-und config-Dateien?
InformationsquelleAutor LMnet | 2013-05-04
Du musst angemeldet sein, um einen Kommentar abzugeben.
Denke ich, dass ich die Lösung gefunden. Als Juned Ahsan und mR_fr0g schreiben, ich ClassLoader der Klasse, statt.getClass().getResource(). Aber, es funktioniert nur für die Ressourcen-Ordner. Aber maven ermöglicht das hinzufügen anderen Ordner als resource Ordner. Ich war einfach nötig, fügen Sie diesen Abschnitt, um pom.xml:
Und eine funktionierende java-code ist:
dann, wie zu Lesen aus der config-Verzeichnis, ohne es als eine Ressource?
InformationsquelleAutor LMnet
Können Sie
getResourceAsStream()
Methode derjava.lang.Class
als Sie getan haben, aber Sie müssen hinzufügen/
vor dem Pfad.Diese Frage ist heikel.
1. Zwei Methoden mit dem gleichen Namen
Zunächst existieren zwei Methoden der gleiche Namen und gleiche Signatur in diese zwei Klassen:
Sie haben den gleichen Namen:
getResource(String)
(undgetResourceAsStream(String)
ist gleich).2. Sie akzeptieren params unterschiedliches format
Dann die param von Ihnen hat unterschiedliche format:
java.lang.Class.getResouce<asStream>()
akzeptiert Pfad mit und ohne die führende/
, was unterschiedliche Ressourcen suchen, Strategien. Wenn ein Pfad hat keine/
Java Suche die Ressource in der Paket - /Ordner, wo die.class
Datei befindet. Wenn es/
Java startet die Suche über die classpath-root.Die Methode
java.lang.ClassLoader.getResource<asStream>()
akzeptiert nur Pfad ohne/
, weil es immer Suche im classpath. In einem classpath-basiert Pfad,/
ist kein gültiges Zeichen. **: Als diese Antwort besagt: diese.getClass().getClassLoader().getResource("...") und NullPointerException
Wie Sie einen Ordner hinzufügen classpath? In Eclipse lösen wir im Kontextmenü des Projekts: "Build path" - "Configure build path..." und fügen Sie einige Ordner zum build path.
3. Wenn es um die Maven
Endlich, wenn ein Projekt ist ein Maven-Projekt, standardmäßig
src/main/resources
ist in den classpath, so können wiroder,
geladen, alles unter
src/main/resources
.Wenn wir wollen, fügen Sie einen anderen Ordner Ressourcen, wie Sie erwähnt haben, es ist getan in
pom.xml
. Und Sie werden Hinzugefügt in classpath als auch von Maven. Keine zusätzliche Konfiguration ist erforderlich.4. Beispiel
Zum Beispiel, wenn Ihr
config.ini
ist untersrc/main/resources/settings
,myAvatar.gif
untersrc/main/images
Sie tun können:In
pom.xml
:Code:
Müssen wir
/
oben.Oder, mit ClassLoader:
InformationsquelleAutor WesternGun
InformationsquelleAutor mR_fr0g
Wie wäre es mit diesem Programm:
oder
Als Sie derzeit haben es da, das Aussehen wird für die MyProperty.properties-Datei auf der Oberseite des klassenpfades. Das könnte in deinem src/main/resources-Verzeichnis oder in anderen src-Ordner-es hängt davon ab, wie Ihre Anwendung (jar/war).
Wenn Sie eine jar-dann sollten Sie in der Lage sein, um es zu entpacken und sehen Ihre Eigenschaften-Datei auf der obersten Ebene der jar-Datei. Wenn Sie bauen ein Krieg, vielleicht sollte es in den WEB-INF/classes-Verzeichnis. Wieder, es hängt davon ab, wie es gebaut wurde.
InformationsquelleAutor Juned Ahsan
Versuchen, das Projekt erstellen, bevor.
Wenn Sie nur die Dateien in den Ordner Ressourcen, dann müssen Sie das Projekt erstellen, um kopieren Sie die neue Ressource-Dateien in den Zielordner
InformationsquelleAutor J. L. Pacheco