# Java Programm distributen



## Eistoeter (28. Mrz 2007)

Hi

Noch eine Frage.

Ich beschäftige mich derzeit noch damit, wie ich mein Java-Programm am Besten für die breite Masse zugänglich machen kann.

Das Programm über Eclipse zu starten ist ja schon mal abwegig, denn die meisten haben ja kein Eclipse, bzw. der Endnutzer soll davon nichts mitbekommen.

Also exportiere ich das Programm als JAR-Archiv, welches über Doppelklick ausgeführt werden kann.

Problem dabei: Wenn der Benutzer einen Packer wie WinRAR mit JAR-Archiven verbunden hat wird es nicht funktionieren. Außerdem ist eine "jar" Datei irgendwie "unschön". Es gibt doch massig Java-Programme und einige laufen bestimmt auch auf jedem PC. Eclipse selbst ist ein Java-Programm. Dennoch wird es über eine EXE-Datei gestartet. Da höre ich aber dann immer wieder das Argument, dass dann ja die Plattformunabhängigeit verloren geht. Wie kann es dann sein, dass ich noch nie ein Java-Programm gesehen habe, welches über ein JAR-Archiv ausgeführt wird. Ein weiteres Problem bei JAR-Archiven ist ja, dass jeder es entpacken kann und dann z.b. Zugriff auf die Bilder und .class Dateien hat ...

Ich bin verwirrt  :autsch:  :###


----------



## AlArenal (28. Mrz 2007)

Machs über Webstart und verschicke millionenfach Spam-Mails mit dem Link.


----------



## mikachu (28. Mrz 2007)

Exportiere das Programm als JAR und erstelle eine BAT, welche das JAR aufruft.
Buffz und wie durch Zauberei musst du nur noch auf die BAT doppelklicken und das Programm nimmt seinen, vielleicht verheerenden, Lauf :wink:!

Und Zugriff auf die Class-Dateien werden ja benötigt. Solange es nicht die Source-Dateien sind, welche die Endung .java besitzen, ist doch alles Wurstbrot. Und die Bilder können die Nutzer dann auch so, via Screenshot und Paint eh wieder herzuzaubern.


----------



## Wildcard (28. Mrz 2007)

Also ich kenne eine Menge Programme die man als jar startet.
Auch Eclipse wird als jar gestartet, lediglich unter Windoof gibt's eine exe die einen Splashscreen zeigt und dann die jar öffnet.
Es gibt übrigens auch Programme die die 'gehijackte' jar extension zurück biegen können :wink:


----------



## moormaster (28. Mrz 2007)

Eistoeter hat gesagt.:
			
		

> Problem dabei: Wenn der Benutzer einen Packer wie WinRAR mit JAR-Archiven verbunden hat wird es nicht funktionieren. Außerdem ist eine "jar" Datei irgendwie "unschön".



Wenn jemand so etwas tut, dann wird er schon wissen warum und welche Konsequenzen das hat. Ansonsten wird WinRAR nicht mit jar Dateien verknüpft, wenn man dies nicht explizit festlegt.

Man kann doch nicht alle Dummheiten des Nutzers berücksichtigen. Wenn jemand seinen ntldr löscht kann Deine Anwendung auch nix dafür. Es sollte nicht Aufgabe einer Anwendung sein, sämtliche Unerfahrenheiten eines Benutzers wieder auszubügeln, wenn diese nicht einmal direkt etwas mit dieser Anwendung zu tun haben.

Wenn das JRE installiert wird, verknüpft es sich unter Windows auch entsprechend mit den jar Archiven und wer diese Verknüpfung anderweitig belegt, muss eben auch mit den Folgen leben (oder wenn er keine Ahnung hat einfach das JRE neu installieren).


Was die Zugänglichkeit der class Dateien angeht: Selbst Java Anwendungen wie Eclipse oder Netbeans werden zwar durch eine exe gestartet, haben aber jar Archive, die offen zugänglich sind.

Auch diverse Kapselungstools, welche JARs in einer EXE Datei verpacken, müssen vor dem Start der java VM das jar Archiv in einen temporären Ordner extrahieren, wo die class Dateien dann auch wieder zugänglich sind.

Bei JSmooth weiss ich z.B. dass man sogar die exe Dateien mit WinRAR direkt entpacken kann.


Es ist einfach eine Eigenart von Java, dass die Resourcen nicht zuverlässig versteckt werden können. Class Dateien können immer in Quelltext zurückverwandelt werden, welcher sich zumindest wieder fehlerfrei compilieren lässt. Man kann höchstens mit einem Obfuscator den Quelltext für den menschlichen Nutzer schwer lesbar machen.

Wenn du darauf angewiesen bist, Windows Anwendungen zu programmieren, wo man am Ende nur native Binärdateien hat, dann solltest du das auch mit der richtigen Programmierumgebung tun.

Wobei du auch da nicht sicher davor bist, dass Resourcen aus der EXE Datei extrahiert werden können. Selbst wenn du die Resourcen verschlüsselt ablegst... bevor die Resourcen benutzt werden können, müssen sie zwangsläufig entschlüsselt werden und liegen dann entschlüsselt im RAM herum. Spätestens am Bildschirm können diese Dinge per Screenshot abgegriffen werden.


----------



## Wildcard (28. Mrz 2007)

moormaster hat gesagt.:
			
		

> Eistoeter hat gesagt.:
> 
> 
> 
> ...


----------



## moormaster (28. Mrz 2007)

komisch ich nutze seit Jahren WinRAR und musste nicht ein einziges Mal die Verknüpfungseinstellung anpassen für Java.


----------



## Wildcard (28. Mrz 2007)

Weil du vermutlich in der Lage bist die Häckchen bei der Installation so zu setzen wie es dir sinnvoll erscheint.
UserXY kann mit dem Begriff 'jar' aber nichts anfangen und verlässt sich auf sinnvolle Defaults des Herstellers.
*Werbung für freie Alternative mach* www.7zip.org


----------



## moormaster (28. Mrz 2007)

Ich brauche den Haken nicht richtig zu setzen. Es gibt genau 2 Szenarien:

a) Das JRE ist bereits installiert und mit JAR verknüpft. In diesem Fall ist das Häkchen bei der Installation von WinRAR neben JAR auch nicht gesetzt -> WinRAR wird nicht mit JAR verknüpft.

b) Das JRE ist noch nicht installiert. In diesem Fall verknüpft sich WinRAR mit den JAR Dateien. Diese Verknüpfung wird jedoch bei Installation des JRE wieder geändert.

Es ist also egal, ob ich erst JRE und dann WinRAR oder umgekehrt installiere. In beiden Fällen ist die Default-Einstellung so, dass am Ende das JRE mit den JAR Dateien verknüpft ist.


----------



## Wildcard (28. Mrz 2007)

Das mag von Version zu Version verschieden sein, als ich jedoch noch Windoof benutzte hat WinRAR versucht die Extension per Default zu stehlen.
EDIT: Ich kann mir auch gut vorstellen das dort einige Beschwerden eingingen und die Default Einstellungen daraufhin angepasst wurden.


----------



## moormaster (28. Mrz 2007)

Softwareupdates sind das A&O... ich kann mich auch an ältere Java Versionen (gar nicht mal soo lange her) erinnern, wo man die ganzen Verknüpfungen per Hand einstellen musste.

Man kann sich wie gesagt nicht für jede erdenkliche Situation anpassen. Es kann letztendlich jedes zusammengebastelte Freeware Programm ankommen und irgendwelche unqualifizierten Änderungen am System vornehmen, so dass sich andere Software nicht mehr so verhält, wie erwartet. Ein (herkömmliches) Auto fährt ja auch nicht mit Wasser statt Benzin im Tank. Eine bisschen gesunden Menschenverstand sollte der Anwender auch mitbringen.

Jemanden der absolut unfähig ist, Vorfahrtsregeln zu lernen/beachten, lässt man ja auch nicht mehr mit einem Fahrzeug auf der Strasse herumfahren. Der muss dann eben zu Fuß gehen.


----------



## Wildcard (28. Mrz 2007)

moormaster hat gesagt.:
			
		

> Eine bisschen gesunden Menschenverstand sollte der Anwender auch mitbringen.


Ist ja alles gut und schön, aber als Entwickler muss man akzeptieren das diese Vorstellung realitätsfremd ist.


----------



## AlArenal (28. Mrz 2007)

Das kommt zum einen auf die Zielgruppe an und ist zum anderen nur eine Frage der Dokumentation. Wenn ich nicht in der Lage bin jemandem zu erklären wie er mein Programm ans Laufen bekommt, habe ich versagt, nicht der Kunde.


----------



## Wildcard (28. Mrz 2007)

Das ist unbestritten. Persönlich gefällt mir da Webstart, das kriegt jeder hin  :toll:


----------



## moormaster (28. Mrz 2007)

Realitätsfremd ist es, Systeme zu bauen, in die man kritische Eingriffe tätigen kann und gleichzeitig zu verhindern, dass jemand, der keine Ahnung hat, diese kritischen Eingriffe vornimmt.

Für einige Nutzer wäre es in der Tat besser, wenn Sie gar nicht erst in die Lage versetzt werden würden, wichtige Einstellungen zu verändern, von denen sie weder genau wissen, was sie tun noch genügend Ahnung haben, um ihr Werk wieder selbst rückgängig zu machen.

Entweder es steht von Anfang an fest, was ein System tun soll und wofür es gedacht ist oder man lässt es in großen Zügen Veränderbar. Im letzteren Fall ist es wie gesagt unmöglich sämtliche Situationen zu bedenken, die dazu führen, dass das System nicht mehr so arbeitet, wie es der Benutzer gerne hätte.

Dazu gibt es zuviele Möglichkeiten das System zu verändern und gleichzeitig zu wenig Absprachemöglichkeiten, da prinzipiell jedes Programm alles ändern darf. Eine Möglichkeit wäre es, den Benutzer danach zu fragen; aber was nützt das, wenn der Benutzer keine Kenntnis davon hat, wie sein System genau funktioniert und was seine Entscheidung dadurch für Konsequenzen haben wird.

Wie kann man es als realistisch ansehen, ein solches System in alle Richtungen DAU sicher machen zu können und gleichzeitig für jeden anpassbar zu halten?


----------



## Eistoeter (29. Mrz 2007)

Okay, wow da sind ja sehr viele Antworten eingangen.

"Auch Eclipse wird als jar gestartet, lediglich unter Windoof gibt's eine exe die einen Splashscreen zeigt und dann die jar öffnet."

Frage dazu: Warum geht man dann den Umweg erst eine EXE zu starten? Dann könnte man ja gleich die JAR öffnen lassen.


Würde es euch nicht irgendwie komisch vorkommen, wenn ihr statt auf Photoshop.exe nunmehr auf Photoshop.jar doppelklickt?
Statt auf Firefox.exe auf Firefox.jar


Okay ich denke damit kann man noch leben, dass die Dateiendung jar einfach ungewohnt ist, aber gibt es denn für das JAR-Archiv eine Möglichkeit, das Icon welches angezeigt wird zu ändern?

Grüße


----------



## Wildcard (29. Mrz 2007)

Eistoeter hat gesagt.:
			
		

> Frage dazu: Warum geht man dann den Umweg erst eine EXE zu starten? Dann könnte man ja gleich die JAR öffnen lassen.


Das hat im wesentlichen 3 Gründe.
1. Eclipse braucht relativ lange zum laden und die VM hat eine hohe startup Zeit.
Der User ist manchmal dazu verführt wenn bei einem Programm nicht direkt etwas passiert es nochmal zu öffnen.
Bei einem so speicherintensiven Programm wie Eclipse müllt dir das den Arbeitsspeicher zu.
Man möchte also noch bevor die VM hochgefahren ist einen Splashscreen anzeigen um dem User zu signalisieren das sich etwas tut.
Mit Java 6 hat sich dieses Problem erledigt, da die VM nun Splashscreens anzeigen kann während sie hochgefahren wird.

2. Für Eclipse reichen die standardmäßigen 64MB Heap nicht aus. Die exe liest also die VM Parameter aus einer ini aus und gibt sie beim jar Start mit, damit der User das nicht tun muss.

3. Ein jar kann (derzeit) kein custom Icon haben (womit deine nächste Frage beantwortet sein dürfte)

Und nein, mir kommt es überhaupt nicht komisch vor jars auszuführen und mir fehlt auch keine .exe die es unter Linux auch gar nicht gibt  :bae:


----------



## Daniel_L (17. Apr 2007)

Ich hab dazu mal einen Beitrag aus der Netbeans-Mailingliste, vielleicht hilft er ja?



> I have a project that needs to be delivered as a *single* executable jar file. Up to now, that was not a problem. My build.xml just added the swing-layout jar contents with
> <unjar src="dist/lib/swing-layout-1.0.1.jar" dest="dist/lib/org"/>
> <jar destfile="dist/SDKControl.jar" update="true" basedir="dist/lib/org"/>
> Which makes the Applications jar file complete (it would be nice if there were a 'default' action in NetBeans to create a single executable jar file that took care of this stuff, but I digress ...  ).





> There is another (manual) method of adding jars to the application jar that you may want to try:
> - Create a directory (say 'lib') in your project's source directory.
> - Copy the library jars to the above directory.
> Because the directory is under 'source packages' , the files in this directory will be automatically included in the application jar by the ide.
> ...



Ich finde, eine Einzeldatei ist immer noch eleganter als mehrere Unterordner. Irgendwie ärgerlich, dass man solche Prozesse nicht automatisieren kann. Ich hab da immer das Gefühl, Java ist vorwiegend auf Web ausgerichtet, während Desktop-Entwicklung etwas unkomfortabler ist.

Gruß
Daniel


----------



## Wildcard (17. Apr 2007)

Daniel_L hat gesagt.:
			
		

> Irgendwie ärgerlich, dass man solche Prozesse nicht automatisieren kann.


Natürlich ist das automatisierbar. ANT/Maven-Script schreiben, FatJar Plugin benutzen, batch schreiben,...
Was bei C/C++ das make File, ist bei Java das (bessere) ANT/Maven


----------



## Daniel_L (18. Apr 2007)

Ich hab mich etwas falsch ausgedrückt: Ich meinte: Ärgerlich, dass solche Prozesse nicht bereits von Haus aus durch die IDE durchführbar sind, bspw. per Checkbox in den Einstellungen ("Nur eine einzelne Datei erstellen" oder sowas).

Als Anfänger/Umsteiger (speziell auf Windows) war ich bisher anderes gewohnt: "Compile and Run" erzeugt eine einzige .exe-Datei auf meiner alten C++-IDE, was bei kleineren Desktop-Anwendungen, die keinen Installer benötigen, ziemlich praktisch ist: Exe-Datei zippen und zum Download/Distribution anbieten, und selbst grobe Anfänger müssen sich nicht mit bestimmten Verzeichnisstrukturen herumplagen.

Mit ANT und Co kenne ich mich auch noch nicht so aus, schau mir das aber mal an, wenn ich etwas mehr Ahnung von Java und den Java-IDEs habe.


----------



## byte (18. Apr 2007)

Du kannst doch in Eclipse ein Projekt als Jar exportieren. Dann bekommst Du genau eine Datei und kannst dort im Dialog auch entsprechende Einstellungen machen, so dass beim Doppelklick auf das jar automatisch die Main gestartet wird (vorausgesetzt, Jars sind mit der JRE in Windoof verknüpft).

Ansonsten ist Webstart sicher eine sehr gute Art, Java-Programme vielen Benutzern verfügbar zu machen. Ansonsten kannst Du auch ne .bat und .sh Datei mitgeben oder halt auch ne Exe erzeugen.


----------



## Daniel_L (18. Apr 2007)

Ich verwende Netbeans, und da ist mir noch keine Option bekannt (wobei ich relativ kurz erst bei Java/Netbeans bin). Normalerweise wird ja auch nur eine Jar erstellt, aber es gibt mitunter zusätzliche Bibliotheken, die im Unterordner "libs" gespeichert und mit ausgeliefert werden müssen. Wie ich weiter oben aus der Netbeans-Mailingliste zitiert habe, kann man durch Modifikation der Build-XML-Datei eine einzige JAR erstellen, aber für Neulinge/Anfänger ist das etwas "versteckt". Eine einfache Option / Checkbutton wäre da wünschenswert. Kann auch sein, dass es sowas in Eclipse gibt, aber in Netbeans hab ich das bisher leider nicht gefunden. Vielleicht wird sich dies in Version 6 mit dem Swing-Application Framework ändern, wenn man dann in Netbeans explizit Desktop-Projekte anlegen kann.


----------



## byte (18. Apr 2007)

Es muss nicht umbedingt die IDE Schuld daran sein, wenn ein Anfänger nicht jede Funktionalität auf Anhieb findet/ versteht. 

http://www.google.de/search?hl=de&q=netbeans+jar&meta=


----------



## Daniel_L (18. Apr 2007)

Nein, das würde ich auch nicht behaupten wollen.


----------



## Gast (4. Mai 2007)

webstart ist ne feine sache. man kann ja so den leuten auch immer quasi eine aktuelle version bieten. es wird ja immer wieder über den gleichen link gestartet, der dann aber evtl. schon ne neue version lädt.

ansonsten izpack.


----------



## Daniel_L (4. Mai 2007)

Gast hat gesagt.:
			
		

> webstart ist ne feine sache. man kann ja so den leuten auch immer quasi eine aktuelle version bieten. es wird ja immer wieder über den gleichen link gestartet, der dann aber evtl. schon ne neue version lädt.


Aber das verlangt immer eine Internet-Verbindung. Für Personen, die mit Laptop unterwegs sind, ist dies nicht immer verfügbar. Außerdem geht das ja auf meine Serverkosten. ;-)



> ansonsten izpack.


Guck ich mir mal an.


----------



## AlArenal (4. Mai 2007)

Daniel_L hat gesagt.:
			
		

> Aber das verlangt immer eine Internet-Verbindung.



Nur einmalig für die Installation.



> Für Personen, die mit Laptop unterwegs sind, ist dies nicht immer verfügbar.



Wenn ich gerade im Auto sitze und heimfahre muss ich dabei auch nichts installieren.. 



> Außerdem geht das ja auf meine Serverkosten. ;-)



Entweder hast du nen miesen Hoster (zu wenig Freitraffic), bis knausrig bis zum gehtnichtmehr, rechnest mit 5 Millionen Downloads im Monat und/oder das Ding soll 3 GB groß werden.....

Anyway - ich würd mir mal Gedanken machen! 



> > ansonsten izpack.
> 
> 
> Guck ich mir mal an.



Aber vergiss nicht:
Wenn der Notebooknutzer unterwegs ist, mag er gerade nicht zu den Öffnungszeiten in der Nähe seiner Postfiliale sein, um dort die CD mit deinem Prog abzuholen....


----------



## Daniel_L (4. Mai 2007)

AlArenal hat gesagt.:
			
		

> Nur einmalig für die Installation.


Und dann kann man es immer wieder starten? Und von wo? Ich vermute, viele Leute fragen sich dann, wo die Verknüpfungen abgelegt wurden, wo das Programm liegt etc. Oder bietet webstart noch mehr, was ich nicht kenne?



> Entweder hast du nen miesen Hoster (zu wenig Freitraffic), bis knausrig bis zum gehtnichtmehr, rechnest mit 5 Millionen Downloads im Monat und/oder das Ding soll 3 GB groß werden.....


Ich würde sagen, der 3. Punkt trifft zu. 



> Aber vergiss nicht:
> Wenn der Notebooknutzer unterwegs ist, mag er gerade nicht zu den Öffnungszeiten in der Nähe seiner Postfiliale sein, um dort die CD mit deinem Prog abzuholen....


Meine Programme gibt es eh auf jeder Heft-CD. :bae: 

;-)


----------



## AlArenal (4. Mai 2007)

Daniel_L hat gesagt.:
			
		

> Und dann kann man es immer wieder starten? Und von wo? Ich vermute, viele Leute fragen sich dann, wo die Verknüpfungen abgelegt wurden, wo das Programm liegt etc. Oder bietet webstart noch mehr, was ich nicht kenne?



Woher sollen wir wissen, was du kennst?


----------



## Daniel_L (4. Mai 2007)

Mit Webstart kenn ich mich im Grunde gar nicht aus. Weiß nur, dass man ein Programm online starten kann und dass es bei Windows einen Eintrag in der Software-Kategorie der Systemsteuerung hinterlegt, was mich ziemlich genervt hat - bin aber auch davon ausgegangen, dass das Programm nach dem Beenden ganz verschwindet und jedesmal für den Start neu aus dem Internet heruntergeladen wird.

Ist das nicht der Fall? Installiert sich das Programm richtig?


----------



## AlArenal (4. Mai 2007)

http://java.sun.com/products/javawebstart/
http://www.oio.de/m/webstart/index.htm


----------



## Daniel_L (9. Mai 2007)

Ich hab mal so ein bisschen die Doku und auch die FAQ gelesen. Dort wird immer betont, dass es sich um "Deployment of web applications" handelt, also Programme, die vorwiegend webbasiert sind.

Wie ist das mit Desktop-Programmen, können Java Webstart Programme problemlos Daten auf lokaler Festplatte laden/speichern?

Und so ganz sicher bin ich mir auch nicht, ob nur eine Verknüpfung auf dem Desktop entsteht und das Programm nur mit Internetverbindung gestartet werden kann, oder ob man Programme über Java Webstart auch richtig installieren und dann ohne Internetverbindung wie ein Desktop Programm verwenden kann?


----------



## AlArenal (9. Mai 2007)

Vielleicht solltest du nicht nur "ein bischen" lesen.....


----------



## Daniel_L (9. Mai 2007)

Naja, ich hab die oben verlinkte Präsentation angeschaut, ich hab die FAQ der Java-Seite durchgelesen und keine eindeutigen Hinweise gefunden und etwas in der Doku gestöbert.

Für dieses "Bisschen" hätte ich eigentlich gehofft, eine Antwort gefunden zu haben, aber irgendwie ist es doch versteckter als ich dachte.

Vielleicht hast du ja einen Lesehinweis?


----------



## Wildcard (9. Mai 2007)

*sigh*


> Wie ist das mit Desktop-Programmen, können Java Webstart Programme problemlos Daten auf lokaler Festplatte laden/speichern?


ja



> Und so ganz sicher bin ich mir auch nicht, ob nur eine Verknüpfung auf dem Desktop entsteht und das Programm nur mit Internetverbindung gestartet werden kann, oder ob man Programme über Java Webstart auch richtig installieren und dann ohne Internetverbindung wie ein Desktop Programm verwenden kann?


kann man


----------



## Daniel_L (9. Mai 2007)

Nicht verzweifeln, ich lern das auch noch.  Aber danke für Hilfe.


----------

