2010-07-31 12 views
8

Ho un'applicazione JNLP funzionante che ho bisogno di distribuire a vari utenti finali non tecnici.Combinazione di Launch4J e Java Web Start?

Se sulla macchina dell'utente è installata una JVM recente, tutto funziona correttamente. Fanno semplicemente doppio clic sul file JNLP che invio e Java Web Start fa il resto.

Ora vorrei distribuire qualcosa che funziona con o senza una JVM, ad esempio, un file .exe che esegue il download automatico di una JVM compatibile se nessuna di queste è presente, quindi richiama javaws.exe per scaricare i file .jar e avviare l'applicazione.

Launch4J è la corrispondenza più simile che ho trovato, ma non è possibile avviare un programma tramite javaws.exe. Le uniche opzioni sono java e javaw

Vorrei un prodotto che può:

  • Generare un .exe self-contained file che non richiede una JVM per essere pre-installato
  • analizzare il file .jnlp e determinare la JVM corretta da scaricare se necessario (so che Java Web Start può scaricare una JVM se necessario, ma voglio evitare di doverne scaricare due, il primo per avviare Java Web Start e il secondo per eseguire l'applicazione che potrebbe richiedere un JVM specifica ma diversa)
  • Scaricare e installare la JVM automaticamente, non semplicemente indirizzare l'utente a una pagina di download Java o aprire una nuova procedura guidata di installazione.
  • Richiedi una password di amministratore, se necessario (per le autorizzazioni di installazione della JVM. Non credo che questo sia incorporato nei programmi di installazione di Sun JVM.)
  • Mostra solo una finestra di dialogo di sicurezza (Vorrei solo chiedere all'utente una volta, per confermare si fidano del generato .exe, ma non voglio un secondo prompt per confermare che si fida del file .jar che verrà dalla stessa origine e firmato con lo stesso certificato.) Suppongo che ciò richiederà l'auto-downloader per installare il certificato prima di avviare JWS.)
  • (non essenziale) Scaricare le risorse dell'applicazione (ad esempio i file .jar) in background contemporaneamente alla JVM. Ciò richiederebbe l'esecuzione della cache prima dell'installazione della JVM, quindi la cache dovrebbe essere implementata nel codice nativo e losi interfacciava in seguito usando JNI.

Esiste un prodotto simile? Sospetto che non lo faccia, ma vale la pena sparare.


Aggiornamento ho trovato this article che ha soluzioni ad alcuni problemi correlati, anche se è stato progettato per l'installazione in linea e sono per lo più interessati con l'installazione on-line.

risposta

2

Ho incontrato lo stesso problema. Ho finito con un BAT, un Shell e un eventuale DMG per Mac.

Ho trovato questo commento su installazione di JRE automaded per l'utilizzo di installazione di Windows Nullsoft:

http://nsis.sourceforge.net/Java_Launcher_with_automatic_JRE_installation

Penso JNLP fuori troverete duro per ottenere l'automazione per tutte le piattaforme. Tuttavia sul mio progetto, per due anni, non ho visto lamentarsi degli utenti che dovevano ottenere java da soli. Credo che la maggior parte delle macchine ce l'avranno già. L'utente di Windows si è lamentato di non avere una scorciatoia, ma è facile da fare usando vbs.

Anche in Mac DMG AppBundle, il loro è il modo per specificare il JRE. Mac avrà la versione più recente, a meno che non siano macchine basate su PowerPC precedenti. In tal caso, nessun Java6.

Di te si finisce con diversi programmi di avvio, vorrei raccomandare una strategia di aggiornamento automatico.

+0

Non sono così preoccupato per le piattaforme non Windows. I Mac hanno sempre installato una JVM e presumo che la maggior parte degli utenti Linux abbia le conoscenze tecniche per trovare e fare doppio clic sul file '.jar' se necessario. – finnw

0

Un altro approccio potrebbe anche distribuire un JRE di Sun con un file .BAT richiamandolo con l'opzione/S, che causa un'installazione invisibile all'utente.

non ho visto nient'altro che permette di Java completamente silenziosa install combinato con javaws invocano.

0

Ok ho ottiene quello che si sta cercando di fare, ma il motivo per cui non si vuole utilizzare javaws? Launch4J sembra una buona opzione in alternativa all'avvio di java, poiché consente l'utilizzo senza interruzioni del file jar.

javaws utilizza più o meno java.exe con autorizzazioni di sicurezza e alcune opzioni di avvio. Ma le autorizzazioni di sicurezza possono essere disabilitate se si utilizza un certificato che l'utente si fida.

Inoltre, non sono sicuro di aver introdotto javaws, ma sono sicuro che era disponibile in java 1.5 che ho vicino a EOL. Quindi, a meno che il tuo utente non abbia installato java per molti anni, dubito che farli lanciare jnlp sarebbe un problema. Anche se eseguono una versione precedente, è possibile aggiungere una versione richiesta di java a jnlp e questa verrà scaricata automaticamente solo per quella applicazione.

+0

I * do * desidera utilizzare javaws. Il caso problematico è un PC che non ha mai avuto Java installato. – finnw

+0

javaws funziona solo se Java è già installato. –

2

È inoltre possibile prendere in considerazione la possibilità di compilare il progetto con Excelsior JET. Oltre a tutto il resto, crea anche una distribuzione autosufficiente di dimensioni ragionevoli.

3

Sono stato in grado di fare questo & usarlo in produzione.

scrivere una semplice classe di bootstrap, jar e Launch4j il jar.

qui è il principale per la semplice classe di bootstrap:

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

Questo suona come il modo giusto per farlo. launch4j garantisce che sia presente una JVM (non so se può installarsi automaticamente o portarne una con esso) e invoca il codice. Quindi il codice indica semplicemente a un browser di avviare lo script JNLP. –

+0

Questo è intelligente, ma non si ottengono due schermate di nag (napp di sicurezza, "si desidera eseguire") sia per questa classe che per l'app Java Web Start? – Joel

0

Anche se non gratuito per uso non commerciale, Install4j offre un sistema di installazione nativo per le applicazioni Java. Il raggruppamento JRE è supportato. Non sono sicuro che possa analizzare automaticamente JNLP, ma potrebbe essere qualcosa che vale la pena di verificare.

Come caso d'uso di esempio, lo Integrated Genome Browser basato su Java viene distribuito con un programma di installazione generato da questo strumento. Vedere la sua install4j configuration file.