# Installer ohne JAR



## schnepfo (2. Aug 2012)

Hallo, ich bin auf der Suche nach folgendem:

Ein Programm mit dem ich aus meinem Eclipse Projekt einen Installer basteln kann habe ich schon. (NSIS)

Dieser entpackt mir das Projekt in den C:/.../Programmordner

So weit so gut.

Jedoch muss ich diese Dateien ja auch irgendwie ausführen? Es sollte durch einen Doppelklick startbar sein, also nicht auf der Konsole auszuführen sein.

Jedoch beeinhaltet ein Projekt nur src und class Dateien, also wie durch Doppelklick ausführen?

Die Lösung als JAR Archiv kenne ich, bringt mir aber in meinem Fall nichts, weil ich auf Dateien innh des JAR Archivs schreibe, und das innerhalb eines JAR Archivs anscheinend nicht möglich ist.

Die einzige möglichkeit die mir einfallen würde, ist obigen Installer zu nehmen damit er es hinkopiert, und dann eine Verknüpfung erstellen, welche dann java.exe aufruft und die zugehörige .class datei ausführt. Jedoch habe ich da das Problem dass ich den Pfad nicht immer kenne.

Gibts dafür eine elegante Lösung?

lg


----------



## nillehammer (2. Aug 2012)

> Gibts dafür eine elegante Lösung?


Die elegantere Lösung ist, den Speicherort Deines Programms (also die .class-Dateien) von den Daten, die es schreibt, zu trennen. Als Speicherort für die Daten bietet sich ein Unterverzeichnis von User-Home an:

```
String dataPath = System.getProperty("user.home") + "/<meinProgrammname>";
```
Dann kannst Du Dein Programm auch als jar verteilen.


----------



## schnepfo (2. Aug 2012)

Also ich weiß nicht ob ich das jetzt richtig verstanden habe.

Meinst du, dass einfach in dem Verzeichnis die Dateien abgelegt werden?

Denn das würde heißen das ich sie beim Start anlegen muss, was aber voraussetzt dass ich den Inhalt, den ich schreiben will, schon im Programmcode drinnen habe.

Das ist jedoch nicht der Fall.

Ich lese eine bereits existierende Datei ein, und möchte auch, dass Änderungen die das Java Programm an der Datei durchführt, bestehen bleiben. Somit ginge deine Lösung, falls ich sie richtig verstanden habe nicht, da sie jedes mal wieder überschrieben werden würde, mit den alten harcodierten Werten welche ich in das Java Programm einbauen müsste.

So eine Lösung beabsichtige ich nicht.

Geht es nicht so: Alles wird in ein Verzeichnis entpackt, + eine Verknüpfung die das Programm aufruft. ?


----------



## nillehammer (2. Aug 2012)

> Ich lese eine bereits existierende Datei ein,


Wo kommt die her? Das kannst Du doch auch weiterhin tun.


> und möchte auch, dass Änderungen die das Java Programm an der Datei durchführt, bestehen bleiben.


Da spricht doch garnichts gegen:

```
- Prüfen, ob Datei in User-Home vorhanden
  - Wenn ja, von dort einlesen
  - Wenn nein, Initialdaten aus Classpath-Resource (also die mit dem Programm ausgelieferte Datei) einlesen oder neu anlegen, je nachdem
```


----------



## schnepfo (2. Aug 2012)

Aber ich will verhindern, dass eine Datei ausserhalb des JAR Archivs angelegt wird.


----------



## nillehammer (2. Aug 2012)

> Aber ich will verhindern, dass eine Datei ausserhalb des JAR Archivs angelegt wird.


Auch bei Deiner Version wird außerhalb eines Jars geschrieben. Innerhalb des Jar-Archivs kannst Du keine Dateien anlegen. Das hast Du ja schon selbst rausgefunden und deswegen lieferst Du Dein Programm in ausgepackter Version in eibnem Verzeichnis aus. In diesem schreibst Du. Was ist daran besser als in "user.home"?


----------



## schnepfo (2. Aug 2012)

ok ich werde es dann so umsetzen.

danke


----------

