Ich habe gerade ein jar file mit Ant gemacht und es läuft eigentlich, aber im jar file ist der src Ordner leider nicht vorhanden.
Ich habe folgende Struktur bei meinem Projekt:
ProjectName/src/org/nexLevel/nextLevel/Main.java
Ich habe zudem noch folgende Datei
ProjectName/config/settings.properties
Wenn ich nun mit Ant das jar erstelle, dann fällt der src Ordner weg, d.h. ich habe dann nur noch org/nextLevel… etc. Das ist ein Problem, da ich in der main Klasse auf die config/settings.properties verweise und die dann nicht mehr gefunden wird.
Vielen Dank, das hat aber leider nicht funktioniert. Wenn ich aber verwende, wird der src Ordner erzeugt und hat auch alle notwendigen Unterordner. Das Problem ist aber, dass dann der /org Ordner immer noch nebenbei existiert. D.h. ich habe jetzt die Ordner src/org/… und org/…
Mit dem FileInputStream liest du (wie der Name schon sagt) aus einer Datei. In Deiner Entwicklungsumgebung funktioniert das, hier liegen alle Dateien in den entspr. Verzeichnissen. In dem jar funktioniert das nicht. Hier gibt es die Datei ja nicht. Innerhalb eines jars kannst Du auf Resourcen zugreifen, als lägen sie in Packages. Mache in etwa folgendes:
Ich habe Server.class genommen, da es in der main Methode liegt und daher statisch ist.
Jetzt kriege ich aber eine null pointer exception bei pro.load(input), d.h. das File wurde nicht gefunden. Und das passiert wenn ich es in Eclipse laufen lasse und auch als jar.
Edit: Also die main methode liegt in ProjectName/src/org/nextLevel/nextLevel/Server/Main. Die main methode ruft das properties file auf, welches in ProjectName/config/settings.properties ist.
Hmm ich kriege noch den gleichen null pointer exception. Ich habe es aber mit Eclipse probiert zu starten (run as…). Ich möchte es aber eben, dass es in Eclipse und als Jar läuft.
NullPointerException kommt, weil “getResourceAsStream()” null zurück gibt, wenn es die Resource unter dem angegebenen Namen nicht findet.
[ul]
[li]Lösung für Eclipse: Füge unter Project Properties -> Java Build Path den Pfad “config…” den Source Folders hinzu.[/li][li]Lösungsmöglichkeit für das jar: Wie schon geschrieben, kontrolliere den Inhalt des jars (kann mit jedem zip-Programm geöffnet werden). Existiert dort der config-Eintrag inkl. Untereinträgen parallel zu den Packages mit den Java-Klassen?[/li][/ul]
Beim jar funktioniert es immer noch nicht. Ich habe das Jar mit 7zip geöffnet. Es existieren alle Ordner, auch der config/settings.properties.
Muss ich beim build.xml eventuell auch etwas zum build path hinzufügen wie bei Eclipse?
Edit: Wenn ich das settings.properties file beim jar aus dem config Ordner nehme, dann funktioniert es. Warum? Ich hätte es lieber auch im jar im config Ordner.
Wenn Du in Eclipse direkt den config-Folder als Src-Path Konfigurierst, dann befindet sich die properties-Datei im Package-Baum im root (sog. Default-Package). Deswegen funktioniert es in Eclipse mit dem angegebenen Code. Im Jar dann auch nur, wenn Du die properties-Datei aus config rausnimmst. Du brauchst ein “Package” config. D.h. du musst in Eclipse einen übergeordneten Folder als Src-Folder konfigurieren. Dann ist das config-Verzeichnis für Eclipse ein Package.
Wenn ich die properties Datei im jar nun aus config rausnehme, funktioniert es ja auf meinem PC. Aber das wird auch auf anderen PCs funktionieren, oder? Oder ist das jetzt von meinen Einstellungen in Eclipse abhängig?