2010-07-31 5 views
8

Ich habe eine funktionierende JNLP-Anwendung, die ich an verschiedene nicht-technische Endbenutzer verteilen muss.Kombination von Launch4J und Java Web Start?

Wenn auf dem Computer des Benutzers eine aktuelle JVM installiert ist, ist alles in Ordnung. Sie klicken einfach auf die JNLP-Datei, die ich ihnen sende, und Java Web Start erledigt den Rest.

Jetzt möchte ich etwas verteilen, das mit oder ohne eine JVM, z. Eine .exe Datei, die automatisch eine kompatible JVM herunterlädt, wenn keine vorhanden ist, ruft dann javaws.exe auf, um die .jar-Dateien herunterzuladen und die Anwendung zu starten.

Launch4J ist die nächste Übereinstimmung, die ich gefunden habe, aber es kann kein Programm über javaws.exe starten. Die einzigen Optionen sind java und javaw

ich ein Produkt möchten, die können:

  • eine in sich geschlossene .exe-Datei generieren, die vorinstalliert werden keine JVM benötigen, um
  • Analysieren Sie die .jnlp Datei und ermitteln Sie die korrekte JVM, um bei Bedarf herunterzuladen (Ich weiß, Java Web Start kann eine JVM bei Bedarf herunterladen, aber ich möchte vermeiden, zwei zu downloaden, die erste, um Java Web Start zu starten und die zweite, um die Anwendung auszuführen, die ein erfordern spezifische aber unterschiedliche JVM.)
  • Downloaden und installieren Sie die JVM automatisch, nicht einfach den Benutzer auf eine Java-Download-Seite oder öffnen Sie einen neuen Installationsassistenten.
  • Aufforderung für ein Admin-Passwort, falls erforderlich (für Berechtigungen zur Installation der JVM. Ich glaube nicht, dass dies in die Sun JVM-Installer eingebaut ist.)
  • Zeige nur einen Sicherheitsdialog (Ich möchte den Benutzer nur auffordern einmal, um zu bestätigen, dass sie der generierten .exe vertrauen, aber ich möchte keine zweite Aufforderung zu bestätigen, dass sie der .jar Datei vertrauen, die von der gleichen Quelle stammt und mit dem gleichen Zertifikat signiert ist.) Ich nehme an, dass dies den Auto-Downloader erfordern wird Installieren Sie das Zertifikat vor dem Start von JWS.)
  • (nicht erforderlich) Laden Sie gleichzeitig Anwendungsressourcen (z. B. .jar Dateien) im Hintergrund mit der JVM herunter. Dies würde erfordern, dass der Cache ausgeführt wird, bevor die JVM installiert wird, so dass der Cache in nativem Code implementiert werden müsste und die DownloadService später mit JNI eine Schnittstelle zu ihm herstellen würde.

Existiert ein solches Produkt? Ich vermute es ist nicht, aber es ist einen Versuch wert.


aktualisieren fand ich this article, die Lösungen für einige verwandte Probleme hat, obwohl es für die Offline-Installation ausgelegt ist, und ich bin vor allem mit Online-Installation betroffen.

Antwort

2

Ich habe in das gleiche Problem gerannt. Ich endete mit einem BAT, einer Shell und eventuell einem DMG für Macs.

fand ich diesen Kommentar auf automaded JRE-Installation für Windows Installer Nullsoft:

http://nsis.sourceforge.net/Java_Launcher_with_automatic_JRE_installation

Ich denke, außerhalb JNLP Sie schwer finden Automatisierung für alle Plattformen zu erhalten. Bei meinem Projekt, das seit zwei Jahren läuft, habe ich jedoch noch keine Beschwerden darüber erhalten, dass Benutzer Java selbstständig machen müssen. Ich glaube, die meisten Maschinen werden es schon haben. Windows-Benutzer haben sich darüber beschwert, dass sie keine Verknüpfung haben, aber das ist einfach mit VBS zu tun.

Auch auf dem Mac DMG AppBundle ist ihre Art, die JRE anzugeben. Mac wird die neueste Version haben, es sei denn, es handelt sich um ältere PowerPC-basierte Maschinen. In diesem Fall kein Java6.

Von Ihnen am Ende mit mehreren Launcher, würde ich eine automatisierte Update-Strategie empfehlen.

+0

Ich mache mir keine Sorgen über Nicht-Windows-Plattformen. Macs haben immer eine JVM installiert, und ich nehme an, dass die meisten Linux-Benutzer das technische Wissen haben, um die '.jar' Datei zu finden und zu doppelklicken, falls nötig. – finnw

0

Ein anderer Ansatz könnte auch sein, eine Sun JRE mit einer .BAT-Datei zu verteilen, die sie mit der Option/S aufruft, was zu einer unbeaufsichtigten Installation führt.

Ich habe nichts anderes gesehen, was eine völlig leiseste Java-Installation in Kombination mit Java-Aufruf ermöglicht.

0

Ok ich bekomme, was du versuchst zu tun, aber warum willst du Javaws nicht benutzen? Launch4J scheint eine gute Option zu sein, als Alternative zur Installation von Java, da es die nahtlose Verwendung der JAR-Datei ermöglicht.

javaws verwendet mehr oder weniger java.exe mit Sicherheitsberechtigungen und einigen Startoptionen. Die Sicherheitsberechtigungen können jedoch deaktiviert werden, wenn Sie ein Zertifikat verwenden, dem der Benutzer vertraut.

Auch ich bin unsicher, wenn javaws eingeführt wurde, aber ich bin sicher, dass es in Java 1.5 verfügbar war, das ich in der Nähe von EOL. Also, es sei denn, Ihr Benutzer hat seit Jahren kein Java installiert, ich bezweifle, dass sie jnlp starten, wäre ein Problem. Selbst wenn sie eine ältere Version ausführen, können Sie dem jnlp eine erforderliche Version von java hinzufügen, die nur für diese Anwendung automatisch heruntergeladen wird.

+0

Ich * möchte * javaws verwenden. Der problematische Fall ist ein PC, auf dem Java noch nie installiert war. – finnw

+0

javaws funktioniert nur, wenn Java bereits installiert ist. –

2

Sie können auch in Erwägung ziehen, Ihr Projekt mit Excelsior JET zu kompilieren. Abgesehen von allem anderen schafft es auch eine autarke Verteilung von angemessener Größe.

3

Ich konnte dies & in der Produktion verwenden.

Schreiben Sie eine einfache Bootstrap-Klasse, jar es und Launch4j das Glas.

hier ist der Haupt für die einfache Bootstrap-Klasse:

public static void main(String[] args) { 
    try {  
    final File jnlp = File.createTempFile("temp", ".jnlp"); 
    final URL url = new URL("http://yourjnlp-wherever-youre-hostingit.jnlp"); 
    yourCopyStreamMethodYouWrote(url.openStream(),new FileOutputStream(jnlp)); 
    Desktop.getDesktop().open(jnlp); 
    } catch (final Throwable t) { 
    // do something useful here 
    } 
} 
+0

Das klingt nach dem richtigen Weg. launch4j stellt sicher, dass eine JVM vorhanden ist (ich weiß nicht, ob es automatisch installiert werden kann oder eine mitbringt), und ruft den Code auf. Der Code weist dann einfach einen Browser an, das JNLP-Skript zu starten. –

+0

Das ist schlau, aber bekommen Sie nicht zwei Nag-Screens (Sicherheits-Nags, "Möchten Sie laufen") sowohl für diese Klasse als auch für Ihre Java Web Start App? – Joel

0

Obwohl nicht kostenlos für nicht-kommerzielle Nutzung, Install4j bietet ein natives Installationssystem für Java-Anwendungen. JRE-Bündelung wird unterstützt. Ich bin mir nicht sicher, ob JNLP automatisch analysiert werden kann, aber es könnte etwas wert sein, das zu überprüfen.

Als Beispiel für einen Anwendungsfall wird das Java-basierte Integrated Genome Browser mit einem von diesem Tool generierten Installationsprogramm verteilt. Siehe seine install4j configuration file.