Classpath Resource in .jar mit ClassLoader.getSystemResource zugreifen

M

McLovin_

Gast
Hallo!

Wie der Titel schon sagt hab ich ein Java-Projekt im *.jar Format welches eine Resource im Unterordner "resources" enthält. Auf diese wird mit ClassLoader.getSystemResource zugreifen (Code ist nicht von mir).
Allerdings retouniert dieser Aufruf immer null, ich weiß das ich die CLASSPATH Variable setzen muss, wenn ich die resource Files außerhalb des .jar Files liegen habe funktionierts, aber mit den Resourcen im jar File bekomm ichs nicht hin, ich weiß nicht wie der Eintrag in der CLASSPATH Variable auszusehen hat, hab schon fast alles ausporbiert. (normalerweise bin ich bei C/C++ daheim nicht java...),.

Wäre nett wenn mir jemand Tipps geben könnte.

MFG
Gast123
 
G

Gast2

Gast
Nein, nen class path musst du da nicht setzen.

Wenn dein jar folgende Struktur hat:
Code:
deine.jar
-> META-INF
-> resources
  -> deinFile
-> package
  -> EineKlasse.class

Dann solltest du einfach per
Code:
EineKlasse.class.getResourceAsStream("/resources/deinFile")
draufzugreifen können.
 
M

McLovin_

Gast
Hey,

danke für deine schnelle Antwort, allerdingst ist der Code nicht von mir und ich sollte wenn möglich nichts daran ändern.
Zugegriffen wird per ClassLoader.getSystemResource("filename"); also der Parameter ist nur der Filename, wäre es so nicht möglich auf die Resource zuzugreifen durch anpassen der CLASSPATH variable ?
 
M

McLovin_

Gast
Hab jetzt die resource Files in den ordner kopiert wo das .jar file liegt. Trotzdem bekomm ichs nicht hin :/
 
M

McLovin_

Gast
Es gibt im jar keine sourcen, oder meinst du beim erstellen/kompilieren des jars müssen die resourcen im source folder liegen ?
 
M

McLovin_

Gast
Ich hab mir jetzt mal die Pfade ausgeben lassen in denen ClassLoader sucht

Java:
ClassLoader loader = ClassLoader.getSystemClassLoader();
URL[] urls = ((URLClassLoader) loader).getURLs();

komischerweise ist der Path aber immer gleich (es ist nur ein Eintrag drin, nämlich der zum .jar), egal ob ich CLASSPATH vorher setze oder java -cp verwende um den CLASSPATH zu setzen, es ändert nichts an den Paths ... OS ist Linux.
 

chalkbag

Bekanntes Mitglied
Hallo,

Variante 1, befindet sich deine Datei IN der Package - Struktur (also im Jar)

Java:
this.getClass().getClassLoader().getResource("de/java/mein/package/icon.gif");

Variante 2, Die Datei liegt neben deiner Jar-Datei

(Beispiel um eine Properties Datei zu laden)
Java:
public static File getPathFromFile(String file) throws URISyntaxException {
		File tarFile = new File(file);

		if (!tarFile.exists()) {
			CodeSource codeSource = MainClass.class.getProtectionDomain()
					.getCodeSource();
			File jarFile = new File(codeSource.getLocation().toURI().getPath());
			String jarDir = jarFile.getParentFile().getPath();
			tarFile = new File(jarDir + System.getProperty("file.separator")
					+ file);

		}
		return tarFile;
}
 
M

McLovin_

Gast
@chalkbag

Variante1 hab ich schon mal verwendet, allerdings hab ich über die Klasse und nicht per Objekt auf getResource zugegriffen (sollte aber eig. egal sein).

Allerdings bekomm ich hier einen anderen Fehler, ich versuche auf das File via
Java:
new File(ClassLoader.getSystemResource("file.xml").getFile());
zuzugreifen, Fehlermeldung:
"java.io.FileNotFoundException: /mnt/var/ch/Projekt/file:/mnt/var/ch/Projekt/file/myprog.jar!/file.xml (No such file or directory)"

Warum sieht de Pfad so komisch aus ? Das File liegt direkt im Root des .jar's.
 
G

Gast2

Gast
Innerhalb einer jar Datei kannst du nicht mit File Objekten arbeiten. Die musst du, wie oben schon erwähnt, mit getResource oder getResourceAsStream laden.
 
M

McLovin_

Gast
Ohhh danke @AngryDeveloper.. dachte nicht da Java da so einen großen Unterschied machen würde...

Und bei der 2. Version gibt es keinen einfacheren Weg ? Es sollte wenn möglich der Aufruf genau gleich bleiben... :/
 
M

McLovin_

Gast
Ist es überhaupt möglich mittels ClassLoader.getSystemResources auf eine Datei außerhalb des .jar's zuzugreifen ?

Sry wegen den Doppelposts.
 

jarobi

Mitglied
Ist es überhaupt möglich mittels ClassLoader.getSystemResources auf eine Datei außerhalb des .jar's zuzugreifen ?

Sry wegen den Doppelposts.

Nein das geht meiner Meinung nicht. Ich hab mich auch vor kurzem mit "getSystemResources" rumgeärgert.
Wenn du auf Dateien innerhalb deines Jars zugreifen willst müssen sich die Files in deinem "Source Folder" befinden. Schau einfach mal in Eclipse welcher Ordner in deinem Projekt der Source Ordner ist.
 
M

McLovin_

Gast
@jarobi Danke!

Nagut, das hat dann keinen Sinn mehr.. ich muss mit File arbeiten, was wiederum innerhalb von jars nicht funktioniert. Wird mir nichts anderes übrig beliben als den Code umzuschreiben.

Danke nochmal für die Hilfe an alle!
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
I Dateien aus dem Resource Folder laden Java Basics - Anfänger-Themen 2
W @Resource WebserviceContext context Java Basics - Anfänger-Themen 11
N Image von Resource wird nicht geladen Java Basics - Anfänger-Themen 2
N Eclipse - eigene Icons unter ClassPath Resource Java Basics - Anfänger-Themen 0
B Dateien aus dem "resource" - Folder kopieren in Verzeichnis Java Basics - Anfänger-Themen 9
ms_cikar Jar file mit resource erzuegen Java Basics - Anfänger-Themen 28
I Erste Schritte Resource Bundle - Alles in einem File oder mehrere? => Faktor Performance Java Basics - Anfänger-Themen 2
R NullPointerException Resource Java Basics - Anfänger-Themen 8
R Classpath java.io.IOException: Could not find resource mybatis-config.xml Java Basics - Anfänger-Themen 5
M Eine Resource die veraltet verwalten Java Basics - Anfänger-Themen 3
S Bild-Resource in Runnable Jar Java Basics - Anfänger-Themen 15
M Thread => Resource Java Basics - Anfänger-Themen 4
F @Resource SessionContext ctx; Java Basics - Anfänger-Themen 2
W MySQL Driver als Resource laden Java Basics - Anfänger-Themen 5
M Grafik als Resource laden? Java Basics - Anfänger-Themen 2
L Instance of ClassLoader-Klasse? Java Basics - Anfänger-Themen 3
M Video in ClassLoader einfügen Java Basics - Anfänger-Themen 7
K OOP Ressource/Datei mit ClassLoader laden Java Basics - Anfänger-Themen 18
D Classloader will auf einma Klasse nich finden Java Basics - Anfänger-Themen 3
T ImageIcon ohne Classloader Java Basics - Anfänger-Themen 12
L ClassLoader - Daten aus einem Package laden Java Basics - Anfänger-Themen 3
G Classloader Hierarchie Java Basics - Anfänger-Themen 6
D ClassLoader in der Jar fehlerhaft Java Basics - Anfänger-Themen 3
I ClassLoader fiindet Klasse nicht Java Basics - Anfänger-Themen 3
D Probelm mit ClassLoader Java Basics - Anfänger-Themen 7
S Classloader JAR Archiv Java Basics - Anfänger-Themen 3
X ClassLoader Java Basics - Anfänger-Themen 2
L Schon wieder ClassLoader bzw. Classpath :-( Java Basics - Anfänger-Themen 3
I ClassLoader funktioniert nicht Java Basics - Anfänger-Themen 11
G ClassLoader und OutPutStream Java Basics - Anfänger-Themen 3
C ClassLoader und Konstruktor Java Basics - Anfänger-Themen 3

Ähnliche Java Themen

Neue Themen


Oben