# Wie liefere ich mein Java-Programm richtig aus?



## Angel4585 (25. Jul 2007)

Wie ich in einem anderen Thread geschrieben habe, stelle ich eins meiner Java-Programme zum Download bereit und möchte dazu die passende JRE-Version ausliefern.

*Probleme:*
1.Was für eine Ordnerstruktur ist geeignet?
2.Was muss ich für verschiedene Betriebssysteme beachten?
3.In welcher Form sollte man das Paket ausliefern?


*Lösungen:*

_1. Ordnerstruktur(Mein Vorschlag)_

/Programm/JRE/
/Programm/bin/Programm.jar
/Programm/data/


_2. Betriebssysteme_

Leider habe ich von Betriebssystemen keine Ahnung weswegen ich da auf die Hilfe der User hoffe
Ich vermute es muss für jedes Betriebssystem ein eigenes JRE benutzt werden, was heisst:
a) Für jedes System ein eigenes Paket
b) Ein Paket mit allen JRE drin
Was ist sinnvoller? Bei vielen JRE wird das Paket auch ziemlich groß denke ich.
Wie müssen diese JRE dann jeweils installiert werden?


_3. Auslieferungsform_

Ein Vorschlag war das Paket zu packen, also zip oder ähnliches.
Ich würde dann einfach das Verzeichnis "Programm" (s.o.) packen.

Ich hoffe das ist korrekt.


----------



## SlaterB (25. Jul 2007)

muss man eine JRE nicht erst installieren?
was ist wenn der User schon eine JRE hat?
das würde ich separat machen,
vielleicht mit auf der Seite anbieten, aber z.B. nicht auf jeden Fall mitkopieren und dann gar im Programm-Ordner

edit: ok, im anderen Thread nebenbei steht ja was dazu


----------



## Angel4585 (25. Jul 2007)

Wie läuft das eigentlich ab wenn z.B. 1.4 installiert ist und 1.6 benötigt wird? Kann ich das in mienem Programmcode prüfen und dann zur Downloadseite verweisen?


----------



## nbkr (25. Jul 2007)

Für Windows gibt es mit "launch4j" und izpack Möglichkeiten .exe Dateien zu erstellen, welche auf die richtige Version des JRE prüfen und gebenfalls das ganze Nachladen.

Für Linux sollte das Programm als RPM oder DEB Datei, oder noch besser als Repository geliefert werden. Sowohl RPM als auch DEB Dateien können Abhängigkeiten definieren. Man kann also bestimmen dass, das Programm z.B. java6 benötigt und die Paketverwaltungssoftware des Systems installiert dies dann automatisch nach.

Bei MacOSX kann man Programme als .dmg bzw. .app Dateien ausliefern.


----------



## deleted (25. Jul 2007)

Ist dein Programm Open Source unter der BSD oder GPLv3 Lizenz?

Wenn ja, ist das Anfertigen von Paketen für Linuxnutzer nicht nötig.
Ein Link zum SVN langt völlig da eh jeder selbst compiliert...


----------



## nbkr (25. Jul 2007)

R.B. hat gesagt.:
			
		

> Wenn ja, ist das Anfertigen von Paketen für Linuxnutzer nicht nötig.
> Ein Link zum SVN langt völlig da eh jeder selbst compiliert...



Den meisten ist vermutlich ein RPM oder eine DEB lieber. Nicht jeder kann mit javac, svn und co. umgehen. Ein einfaches "apt-get install programm" geht viel schneller und einfacher.


----------



## deleted (25. Jul 2007)

naja er schrieb, er hat von Betriebssystemen keine Ahnung 
Klar ist es bequem, wenn ein Entwickler mir das gleich so baut, dass ich es über den Paketmanager installieren kann.
So stell ich meine Sachen auch meist bereit.

Aber lebensnotwenig ist das nicht unbedingt.
Irgendein User fummelt schon ne Copileranleitung oder ein Paket zusammen. Oder ein Distributor nimmt es auf...

Ist doch das Prinzip freier Software:
Der Programmierer programmiert, die Usercommunity verteilt und nutzt.

Das ist im Übrigen auch der Grund für das sagenhafte Entwicklungstempo bei Linux.
Linux ist die am effizientesten arbeitende "Softwarefirma" die ich kenne.
Bei proprietärer Software wird das Rad täglich 10x neu erfunden, bei freier Software macht jeder seinen Job.
Und im Übrigen ist das ja eigentlich auch nicht die Aufgabe eines Entwicklers sich mit Installationsproblemen bei den Usern rumzuärgern.
Das ist der Job des Distributors.


----------



## babuschka (26. Jul 2007)

@ R.B.
Kann deine Meinung nicht ganz teilen. Natürlich sollte sich der Entwickler um so was Gedanken machen.
Schreckt nicht viele Windows-User Linux ab, weil vieles so kompliziert ist?
Ich will hier keine Grundsatzdiskussion lostreten, ich will nur damit sagen, dass es auch bei Linux User gibt, die keine Profis sind :roll:


----------



## tuxedo (26. Jul 2007)

Um zurück auf die Ursprungsfrage zu kommen:

Die Ordnerstruktur ist denke ich soweit okay. Würde ich auch nicht andes machen.

Und ja: Für jedes OS müsstest du ein Paket schnüren das die passende JRE im JRE-Ordner deiner Ordnerstruktur hat. 

Da du dich mit Betriebssystemen nicht so auskennst schlage ich vor du bleibst erstmal bei dem was du kannst und erweiterst dann später wenn das bei Windows (ich nehme das mal als "bekannt" an) geklappt hat.

Hier kannst du nachlesen was man aus einem JRE alles streichen kann, sprich was alles "optional" ist.

Zum starten deines Programms mit der mitgelieferten JRE solltest du nicht einfach 


```
java -cp .\meineBibliotheken -jar ./bin/MeinProgramm.jar
```
aufrufen, denn dann wird die Java Version benutzt die schon installiert ist. Du solltest hier explizit die Java-Version aufrufen die du mit auslieferst.
Wenn du mit .BAT Dateien zum starten arbeitest, kannst du das Beispielsweise so machen:


```
.\JRE\bin\java.exe -cp .\meineBibliotheken\meineBibliothek.jar;.\JRE\bin\lib\rt.jar -jar ./bin/MeinProgramm.jar
```

Habs nicht explizit getestet, aber so in etwa sollte es funktionieren.

Ausliefern kannst du es dann als ZIP (dann ist es jedem selbst überlassen mit was er es entpackt und wo er es entpackt), oder du packst die ganze Ordnerstruktur mit einem Installer (izPack, B1G Installer, .-...) zusammen und hast eine schöne Installationroutine die dann (bei Windows zumindest) auch eine Verknüpfung mit dem Desktop basteln kann.

- Alex


----------



## deleted (26. Jul 2007)

@berndmarquard & @Threadstarter

Also das Gefummel irgendwelcher User in Programmdateien sollte eben unterlassen werden.
Das ist doch gerade der Grund warum Linux so sicher ist:
Die Distributoren kümmern sich um alles.
Und im Übrigen hab sogar ich als Informatiker nicht wirklich Lust mich damit rumzuärgern, welches Paket nun aktualisiert werden muss, inkompatibel ist usw.

Aber ganz andere Idee;
Warum nicht *Webstart* nutzen?
Das ist
a) sehr sicher
b) plattformunabhänig

der User muss nur einmal über seinen Paketmanager Java installieren. Java wird dann vom Distributor geupdatet und Webstart kümmert sich um die Anwendung!

SUN hat diese ganzen Technologien ja nicht zur Selbstbelustigung entwickelt, sondern damit eben ein Programm problemlos in einer heterogenen Umgebung ausgeführt werden kann...

Alternativ sollte man aber dann dennoch einen Lesezugriff aufs SVN zur Verfügung stellen, damit z.B. Leute, die die Software in ihrem Netzwerk lokal verteilen wollen dies einfach erledigen können!


----------



## Yzebär (26. Jul 2007)

R.B. hat gesagt.:
			
		

> Aber lebensnotwenig ist das nicht unbedingt.
> Irgendein User fummelt schon ne Copileranleitung oder ein Paket zusammen.



Genau diese Einstellung ist es, die dem Siegeszug von Linux auf dem Desktop oftmals im noch im Wege steht!


----------

