# Plattformunabhängiges Deployment für simple Zwecke



## muhazz (16. Feb 2012)

Hallo liebe Java-Gemeinde,

ich beschäftige mich nun schon seit einigen Jahren immer wieder mit dem Programmieren in verschiedenen Sprachen, in der letzten Zeit insbesondere mit Java. Nun bin ich das erste Mal in einer Situation, wo ich geschriebene Software für Kunden bereitstellen muss. Ich habe zu diesem Thema Einiges im Internet gelesen - es scheint ja sehr vielfältige Möglichkeiten zu geben - konnte aber bisher  trotzdem keine zufriedenstellende Lösung finden.
Nun wende ich mich mit zwei Bitten an euch: einmal einige grundlegende Fragen zum Verständnis und dann natürlich eine ganz konkrete Empfehlung für meine Bedürfnisse.

Die Anforderungen an die Art des Software-Deployments sind eigentlich recht simpel:
Die Software soll vom Endbenutzer unter den gängigen Betriebssystemen Windows, Linix und Mac OS in der jeweils üblichen Weise aufgerufen werden können (.exe, .bin und...ja, und was eigentlich unter Mac OS?). Das soll auch ohne Internetzugang geschehen können. Optimal wäre, wenn die JRE beim Kunden nicht installiert sein müsste - hier könnte man aber am ehesten Abstriche machen.
Außerdem möchte ich keine kostenpflichtigen Programme verwenden, Trial-Versionen nur, wenn keine zeitlichen Einschränkungen bestehen und keine Hinweise/Werbung beim Benutzer sichtbar werden.


Vorab: Ich habe sowohl den FAQ-Eintrag als auch einige weitere Artikel im Internet, u.A. diesen Artikel, gelesen.

Für mich sieht es so aus, als wären "Java-Aware Setup Authoring Tools" die optimale Lösung und Programme wie install4j, InstallShield, InstallAnywhere,... die perfekten Anwendungen dazu - allerdings steht der Preis bei allen natürlich in keinem Verhältnis zu meinem Projekt.
Allerdings ist mir der Unterschied zwischen "Java-Aware Setup Authoring Tools" und simplen "Wrappern" noch nicht 100%-ig klar. Worin ebsteht der Unterschied denn genau und wie macht er sich dann konkret bemerkbar (für mich und den Endbenutzer)? Besteht er evtl. nur darin, dass die Setup-Generatoren zusätzlich noch weitere Dinge tun können wie Verknüpfungen anlegen usw?

Wenn ich das richtig verstehe, erfüllt z.B. IzPack alle meine Forderungen bis auf die Unabhängigkeit von einer vorinstallierten JRE und fällt unter die Kategorie der Setup-Generatoren. Das Programm "Launch4j" hingegen fällt nach dem oben aufgeführten Artikel in die Kategorie der "Wrapper" und hat den inaktzeptablen Nachteil, nur für Windows zu funktionieren, und außerdem benötigt man hier meiner Meinung nach wieder eine installierte JRE. Stimmt das alles so? Und, angelehnt an die Frage oben, wo ist denn der Unterschied, wenn man von der Plattform(un)abhängigkeit absieht (die bei Launch4j glaube ich ja theoretisch durchaus auch vorhanden sein könnte).

Dann gibt es ja noch die Möglichkeit, Java Quellcode oder Bytecode in Maschinencode zu kompilieren mit einem sog. Native Compiler, richtig? Da blieb mir aber unklar: Muss eine JRE beim Anwender installiert sein? Meine Vermutung: Nein, alles kann mitgeliefert werden, dafür wird aber die Datei für den Anwender wesentlich größer.
An Tools dazu konnte ich bisher nur den GCJ ausfindig machen, der ja allerdings nur für Windows geeignet ist. Gibt es noch Anwendungen für andere Betriebssysteme? Und kann ich versch. Betriebssysteme einfach einzeln abhandeln und mir praktisch eine .exe, eine .bin und eine weitere Mac OS-Datei machen, oder sollte ich nach einer Software-Lösung für alles suchen?

So, das waren viele Fragen zu später Stunde. Für Anregungen und Hilfestellungen wäre ich sehr dankbar.

Viele Grüße und schonmal vielen Dank für's Lesen!
muhazz


----------



## Gast2 (16. Feb 2012)

Du wirst um einzellösungen für jedes Betriebssystem nicht herumkommen wenn du die nativen "Binaries" vorgaukeln willst. 

Meine Frage: Wieso? Was ist das Problem einfach die jar auszuliefern? Das JRE kannst du ja dann dazupacken wenns sein muss.


----------



## Wildcard (16. Feb 2012)

> Dann gibt es ja noch die Möglichkeit, Java Quellcode oder Bytecode in Maschinencode zu kompilieren mit einem sog. Native Compiler, richtig?


Das ist eine ganz schlechte Idee...
Fast jeder Rechner hat heutzutage eine JRE installiert. Eine jar auszuliefern ist in den meisten Fällen die einfachste Variante. Wenn du es besonders komfortabel und DAU freundlich haben willst, dann verwende Java Webstart. 
Link im Browser anklicken -> Programm wird heruntergeladen -> legt optional einen Startmenü Eintrag/ein Shortcut an -> Programm startet.


----------



## muhazz (17. Feb 2012)

Schonmal danke für die Antworten.


Wildcard hat gesagt.:


> Das ist eine ganz schlechte Idee...
> Fast jeder Rechner hat heutzutage eine JRE installiert.


Hmm, das habe ich vermutet. Java WebStart wurde als Alternative allerdings explizit ausgeschlossen.

Was passiert denn genau, wenn ich IzPack verwende? IzPack erstellt einen Installer für mein Programm, der sich auf versch. Betriebssystemen ausführen lässt, wenn eine JRE installiert ist. Nur was ist dann das Ergebnis, d.h. wie startet der Benutzer das Programm letztendlich?

Viele Grüße,m
muhazz


----------



## Wildcard (20. Feb 2012)

> Nur was ist dann das Ergebnis, d.h. wie startet der Benutzer das Programm letztendlich?


Das Ergebnis ist was du vorher in den Installer gepackt hast. Der Benutzer startet das Programm über eine Jar, Shell Script, oder wrapper binary die du zur Verfügung stellst.


----------

