Eclipse Verständnisfrage Eclipse+Maven+Resources

cjs1976

Mitglied
Hallo!

Damit Maven die Resources korrekt erkennt, muss man laut Anleitung auf der Maven-Webseite, die Dateien unter src\main\resources ablegen. Das habe ich gemacht, und beim Build werden diese Dateien dann direkt in der Root von der JAR-Datei abgelegt. Genau so steht es auf der Maven-Webseite, genau so funktioniert es auch. Ich weis auch wie ich auf diese Daten (Bilder und Texte) in der Jar zugreife, und das funktioniert auch ganz brav.

Natürlich will ich nun nicht jedes Mal ein Build machen, wenn ich meine aktuellen Änderungen testen will.

Aber der Zugriff auf die Daten in der Jar funktioniert ja komplett anders, und der Ordner ist auch ein anderer. Wie kann ich Eclipse mitteilen, dass beim einfachen Test ein anderer Ordner/ein andere Zugriff erfolgen soll, als bei der fertigen Jar-Datei? Wie lösenn den das die Profis?

Danke.
 

tagedieb

Top Contributor
Hast du in deinem Projekt den Maven Project Builder definiert? Benoetigt natuerlich das Maven Plugin, aber ich geh davon aus, dass du das installiert hast.

Siehe: Projekt -> Properties -> Builder

Der Maven Project Builder sollte automatisch process-resources und process-resources-test ausfuehren und deine Resourcen in den target Folder kopieren.

Ansonsten den /src/main/resources Folder auch als Java Source Pfad deklarieren
 

kama

Top Contributor
Hallo,
Natürlich will ich nun nicht jedes Mal ein Build machen, wenn ich meine aktuellen Änderungen testen will.
Wenn Du M2 Eclipse verwendest sorgt das schon dafür...

Aber der Zugriff auf die Daten in der Jar funktioniert ja komplett anders, und der Ordner ist auch ein anderer. Wie kann ich Eclipse mitteilen, dass beim einfachen Test ein anderer Ordner/ein andere Zugriff erfolgen soll, als bei der fertigen Jar-Datei? Wie lösenn den das die Profis?
Die Konvention in Maven ist einfach in den Ordner src/test/resources abzulegen, was nur für den Test Verwendung finden soll....

Gruß
Karl Heinz Marbaise
 

cjs1976

Mitglied
Hallo!

Ich glaube, das habe ich falsch erklärt. Wie das mit Maven geht, das weis ich, und der Build klapt auch einwandfrei. Mein Programm wird dabei in eine JAR gepackt. Und die Resource-Dateien liegen dann entsprechend in der JAR-Datei.

Im Programm greife ich dann zB mittels ClassLoader.getSystemResource("Changelog.xhtml") auf die entsprechenden Dateien zu. Das klappt auch einwandfrei. Keine Fehler.

In meinem Eclipse-Projekt liegen die Dateien jedoch im Ordner src/main/resources. Und wenn ich unter Eclipse sage Run as Java Application, dann werden die Resourcen natürlich nicht gefunden, weil die ja zu diesem Zeitpunkt in einem anderen Ordner liegen.

Ich kapiere also nicht, wie ich meinen Code gestalten soll, dass ich die Software während der Entwicklung ganz normal unter Eclipse testen kann, und die Software trotzdem auch nach einem Build (in eine JAR-Datei) einwandfrei funktioniert.

Danke.
 

tagedieb

Top Contributor
Hast du in deinem Projekt den Maven Project Builder definiert? Benoetigt natuerlich das Maven Plugin, aber ich geh davon aus, dass du das installiert hast.

Siehe: Projekt -> Properties -> Builder

Der Maven Project Builder sollte automatisch process-resources und process-resources-test ausfuehren und deine Resourcen in den target Folder kopieren.

Ansonsten den /src/main/resources Folder auch als Java Source Pfad deklarieren

Wenn du den Maven Project Builder definiert hast sollte das eigentlich kein problem sein. Ansonsten den /src/main/resources Folder auch als Java Source Pfad deklarieren
 

kama

Top Contributor
Hallo,
Im Programm greife ich d ann zB mittels ClassLoader.getSystemResource("Changelog.xhtml") auf die entsprechenden Dateien zu. Das klappt auch einwandfrei. Keine Fehler.

In meinem Eclipse-Projekt liegen die Dateien jedoch im Ordner src/main/resources. Und wenn ich unter Eclipse sage Run as Java Application, dann werden die Resourcen natürlich nicht gefunden, weil die ja zu diesem Zeitpunkt in einem anderen Ordner liegen.
Der letzte Teil ist nicht ganz richtig. Da wenn man die Applikation aus Eclipse heraus aufruft, werden vorher all Dateien in den target/classes ordner kopiert inkl. der resources inhalte. Damit sollte dort kein Unterschied sein..Probiere eventuell mal aus, im getSystemResources("/Changelog.xhtml") mit dem Slash !

Gruß
Karl Heinz Marbaise
 

tagedieb

Top Contributor
Verwende
Code:
 ClassLoader.getSystemResourceAsStream()
sonst erhaelst du nur eine URL. Mit einem InputStream kannst du das File direkt lesen. Geht einfacher
 

cjs1976

Mitglied
Das wirft mir aber einen Fehler. Ich fülle damit ein JEditorPane, und verwende dazu "<JEditorPane>.setPage(ClassLoader.getSystemResource("Changelog.xhtml"));". Wenn ich da den Stream nehme, dann kommt ein Fehler, weil setPage keine Streams mag.
 

Oben