# Maven: relativer Resources-Pfad



## Smasher (26. Mai 2010)

Hey!

Ich habe in Maven in der POM den Resourcen-Ordner deklariert. Ich kann auf die Dateien, die sich in diesem Ordner befinden ohne Probleme zugreifen. 

z.B. habe ich eine Settings.xml-Datei im Ordner <Projektpfad>/src/main/resources/config/, die geladen wird.


```
file = new File(ClassLoader.getSystemResource("conf/Settings.xml").toURI());
```

Funktioniert toll.

Wenn die Datei jedoch fehlt, gibt es eine Exception. Klar!

Die fange ich auf und möchte nun in dem Catch Block die fehlende Settings-Datei mit

```
file = new File(ClassLoader.getSystemResource("conf/").toURI()+"Settings.xml");
```
erstellen.

Funktioniert aber nicht, da der Konstruktor von File einen zum Projektordner relativen Pfad verlangt. Ich übergebe ihm aber mit 
	
	
	
	





```
ClassLoader.getSystemResource("conf/").toURI()
```
 den Absoluten Pfad "<Projektpfad>/src/main/resources/config/".
Die Datei hat am Ende einen Pfad: <Projektpfad><Projektpfad>/src/main/resources/config/Settings.xml und wird nicht erstellt.

Wie bekomme ich den relativen Pfad vom Resourcen-Ordner in Maven oder wie würdet ihr das anders lösen?


----------



## maki (26. Mai 2010)

Vergiss mal File ganz schnell wieder, was ist wenn deine App in einem Jar liegt?
Dann kannst du dort weder ein File öffnen, ändern oder erstellen.

Was hast du denn eigentlich vor?


----------



## kama (26. Mai 2010)

Hallo,



Smasher hat gesagt.:


> Ich habe in Maven in der POM den Resourcen-Ordner deklariert.


Warum deklariest Du etwas was schon vorhanden ist...

"Convention over Configuration" ist das Motto von Maven...src/main/resources bzw. src/test/resources ist schon entsprechend deklariert...

EDIT: Ja genau, beschreibe mal was du vor hast?

Gruß
Karl Heinz Marbaise


----------



## Smasher (26. Mai 2010)

Also die App soll am Ende auf jeden Fall in ein Jarfile bzw. aus einem Jarfile geladen werden.
Wusste nicht, dass man auf ein Jarfile bzw. im Jarfile keine Schreibrechte hat. Gut zu wissen.
Die Settings.xml Datei speichert Einstellungen, die in der Software vorgenommen wurden. Welche das jetzt sind spielt glaube ich in diesem Zusammenhang keine Rolle. Die Settings.xml Datei soll also beschrieben werden können und sollte sich im Jarfile befinden.



kama hat gesagt.:


> Warum deklariest Du etwas was schon vorhanden ist...
> 
> "Convention over Configuration" ist das Motto von Maven...src/main/resources bzw. src/test/resources ist schon entsprechend deklariert...



Ähm, bei mir war kein Eintrag in der POM.xml, der den Resource Ordner deklarierte. Mit deklarieren meinte ich diesen Eintrag in die POM.

[XML]  <build>
    <resources>
    	<resource>
  			<directory>/src/main/resources</directory>
  		<filtering>true</filtering>
  	</resource>
  </resources>
  </build> [/XML]


----------



## maki (26. Mai 2010)

> Die Settings.xml Datei soll also beschrieben werden können und sollte sich im Jarfile befinden.


Nochmals: Das geht nicht!
Eine Jar enthält keine Files, sondern Entries, ein geöffntetes Jar (eine App die läuft) kannst du nicht ändern in dem du Dateien hinzufügst/änderst/entfernst.

Deine Einstellungen können also NICHT im Jar gespeichert werden, kannst ja mal nach Preferences suchen.



> Ähm, bei mir war kein Eintrag in der POM.xml, der den Resource Ordner deklarierte. Mit deklarieren meinte ich diesen Eintrag in die POM.


Wie kama bereits sagte ist das übeflüssig, die Super Pom definiert das schon so.
Empfehle da den Aufruf
[c]mvn help:effective-pom[/c]
um Klarheit zu schaffen.


----------



## Smasher (26. Mai 2010)

> Nochmals: Das geht nicht!
> Eine Jar enthält keine Files, sondern Entries, ein geöffntetes Jar (eine App die läuft) kannst du nicht ändern in dem du Dateien hinzufügst/änderst/entfernst.


Habs gerade bemerkt, er legt die Settings.xml Datei außerhalb des Jarfiles an. Man, und ich dachte immer der macht das im Jarfile. 



> Wie kama bereits sagte ist das übeflüssig, die Super Pom definiert das schon so.


Verstehe.

Danke euch!


----------



## kama (26. Mai 2010)

Hallo,



Smasher hat gesagt.:


> Ähm, bei mir war kein Eintrag in der POM.xml, der den Resource Ordner deklarierte. Mit deklarieren meinte ich diesen Eintrag in die POM.


Ah Du wolltest Resourcen Filtern (Hast Du vorher aber nicht erwähnt)...dann musst Du das machen. Ansonsten wäre es nicht nötig gewesen..

Gruß
Karl Heinz Marbaise


----------

