Best Practices

gee_20_4_7

Mitglied
Hallo Leute,
ich bin ein wenig unerfahren, was Maven und zb. Auslieferung Releases betrifft. Jetzt hab ich aktuell zwei Probleme, die mich in Verbindung mit Maven etwas aufhalten.

1. Laut Konventionen werden Dateien, wie beispielsweise Bilddateien, die zur Laufzeit des Programmes genutzt werden, in
Code:
src/main/resources
abgelegt. Während der Entwicklung im Eclipse greife ich über diesen Pfad darauf zu. In der gepackten JAR-Datei ändern sich diese Bedingungen ja, denn diese Dateien landen im Root der JAR. Wie kann ich das am besten abwickeln? Gibt es da irgendwelche Best-Practices, oder Ähnliches?

2. Es ist eine SWT-Anwendung, welche vm-Argumente benötigt. Wie kann ich diese für den automatischen Aufruf mit der JAR deklarieren? Mein Freund Google verriet mir da nur etwas in Verbindung mit dem surefire-Plugin, was aber keine Wirkung zeigte.

Ich hoffe es gibt jmdn, der mir diese, vermutlich einfachen, Dinge beleuchten kann/will.

Danke
 
Zuletzt bearbeitet von einem Moderator:

TheDarkRose

Gesperrter Benutzer
1. Laut Konventionen werden Dateien, wie beispielsweise Bilddateien, die zur Laufzeit des Programmes genutzt werden, in
Code:
src/main/resources
abgelegt. Während der Entwicklung im Eclipse greife ich über diesen Pfad darauf zu. In der gepackten JAR-Datei ändern sich diese Bedingungen ja, denn diese Dateien landen im Root der JAR. Wie kann ich das am besten abwickeln? Gibt es da irgendwelche Best-Practices, oder Ähnliches?

Codeausschnitt bitte posten wie du auf die Bilder zugreifst. Auch wenn es unter src/main/resources liegt, es ist auch in Eclipse so als Buildpath definiert und wird somit eigentlich als / behandelt wie es dann auch in der JAR ist.
 

gee_20_4_7

Mitglied
Ok das ging schnell :)

Also als VM-Argumente muss ich
Code:
-d32 -XstartOnFirstThread
übergeben. Kann man diese automatisch mit bspw. Doppelklick aufrufen lassen, oder kommt man da um ein Skript nicht drumherum?

Ich greife auf die Images bspw. während der Entwicklung
Code:
String image = "src" + File.separator + "main" + File.separator
			+ "resources" + File.separator+"image.bla";
new File(image)
zu.

Ich hab da auch schon was von
Code:
XYZ.class.getResource("/image")
gelesen, jedoch lande ich ja dann im JAR auch nur im classes-folder und kann nicht auf die im JAR-Root liegenden Dateien zugreifen...Obwohl kann ich ja relativ doch, oder?
 
Zuletzt bearbeitet:
M

maki

Gast
Du brauchst ein Skript um VM Parameter zu übergeben, die andere Frage wird sehr ausführlich in dem Link beantwortet ;)

Nebenbei, im Jar gibt es keinen classes Folder, dort ist alles im Classpath.
 

gee_20_4_7

Mitglied
ups, das ging ja dann doch einfacher als gedacht ;) Mannometer manchmal sieht man den Wals vor Bäumen nicht...
Achso eine Sache noch, wo legt ihr eure log-Dateien hin? Ich möchte diese gerne neben der jar in einem separaten Verzeichnis ablegen. Wie händelt ihr das? Das separate Verzeichnis relativ zur gepackten jar, wär ja zum Projekt der Workspace, oder?

PS. Ja mit Blick in die Jar-Datei fällt mir auf, dass es dort keinen classes-folder gibt. :) Mann, da muss ich aber noch einiges nachholen...
 
N

nillehammer

Gast
Achso eine Sache noch, wo legt ihr eure log-Dateien hin?
-Hol Dir beim Start Deines Programms das System-Property "user.home"
-Leg dort mit Deinem Programm einen Unterordner mit dem Namen Deines Programms an (natürlich nur, wenn noch nicht existent). Am Besten mit einem "." vorangestellt
-Schreib in das Verzeichnis Deine Logdateien
 
G

Gastredner

Gast
Ich greife auf die Images bspw. während der Entwicklung
Code:
String image = "src" + File.separator + "main" + File.separator
			+ "resources" + File.separator+"image.bla";
new File(image)
zu.
Noch ein Hinweis dazu: File kannst du beim Navigieren innerhalb von JARs nicht nutzen, da dieses eine Datei im Filesystem darstellt (und nicht innerhalb eines Archivs). Mit ZipInput/OutputStream und ZipEntry bzw. JarInput/OutputStream und JarEntry gibt es eigene Klassen für den Fall, das man mit den Inhalten von ZIP- bzw. JAR-Archiven arbeiten muss. Willst du lediglich auf die Inhalte zugreifen (und nicht bspw. die Struktur des JARs auslesen), so verwendest du getResource bzw. getResourceAsStream und arbeitest mit der zurückgegebenen URL bzw dem Stream weiter.

Zu den Konfigurationsdateien: meiner Meinung nach ist es am besten, Konfigurationsdateien und ähnliches in einem zentralen Verzeichnis im Benutzerverzeichnis abzulegen, welches du über
Java:
System.property("user.dir");
ermitteln kannst. Dort legst du einen Ordner wie ".appName" an und erstellst dort deine Dateien. Vorteile: du hast mit hoher Sicherheit Schreibrechte (welcher Benutzer hat diese in seinem eigenen Verzeichnis nicht?) und kannst getrennte Einstellungen für verschiedenen Benutzer haben, ohne selbst entsprechende Vorrichtungen installieren zu müssen. Nachteil: bei der Deinstallation müssen auch diese Dateien entfernt werden, was u. U. einen Deinstaller erforderlich macht (bzw. ein entsprechendes Skript). Du könntest natürlich auch die Preferences-Klasse verwenden, solange du damit einverstanden bist, dass du nicht explizit bestimmen kannst, wo und wie die Einstellungen genau gespeichert werden und diese ohne Deinstaller bzw. Deinstall-Skript u. U. nicht zu entfernen sind.
 
G

Gast2

Gast
Du meinst sicherlich
Code:
user.home
,
Code:
user.dir
ist das working directory :)
 

gee_20_4_7

Mitglied
Ich danke allen, die mir bei meinem Problem mit Rat und Tat beiseite standen, auch nochmal Danke an Gastredner mit den ausführlichen Erläuterungen. Und ja, nun weiß ichs auch :D Es war kein Maven-Problem.

Vielen Dank und weiter so!
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
S Best Practices CopyConstrutor mit ArrayList Allgemeine Java-Themen 1
F Error Logging - best practices? Allgemeine Java-Themen 3
M Best Practices für Undo/Redo Allgemeine Java-Themen 16
G Best Practices Software-Engineering‏ Allgemeine Java-Themen 3
M Best Practices Exception Handling für eigene library Allgemeine Java-Themen 8
Ameise03 Best&Worst Case bei Insertionsort Allgemeine Java-Themen 10
T Best Practice überprüfen von Übergabeparametern Allgemeine Java-Themen 17
S best practice: Einordnung Enitity und Datenklasse Allgemeine Java-Themen 11
temi best practice: Parameter überprüfen, wo? Allgemeine Java-Themen 9
Airwolf89 JUnit: Vorschläge/ Best Practice Allgemeine Java-Themen 7
M Best Practice: Daten aufnehmen-speichern-bereitstellen Allgemeine Java-Themen 8
H Best Practice zu vielen konstanten Objekten? Allgemeine Java-Themen 10
F best practice Allgemeine Java-Themen 5
J Input/Output Dateien bearbeiten - "Best Practice" Allgemeine Java-Themen 3
R Statische Klasse: Best practice mit flags (2) Allgemeine Java-Themen 3
musiKk Best Practice für kleine Variationen in gegebenen Modellklassen Allgemeine Java-Themen 11
S best practise Allgemeine Java-Themen 6
J Best Practice für implementierung von equals(...) Allgemeine Java-Themen 7
Daniel_L Best Practice zum Löschen von Log-Files? Allgemeine Java-Themen 8
S Array: Anzahl Elemente mit best. Wert zählen Allgemeine Java-Themen 4
M Best Match / Best Fit auf Strings Allgemeine Java-Themen 9
G Exception handling - b.practices/tipps. etc. Allgemeine Java-Themen 3

Ähnliche Java Themen

Neue Themen


Oben