Qual è il modo migliore per distribuire le applicazioni Java?

Java è uno dei miei linguaggi di programmazione di scelta. Mi imbatto sempre nel problema di distribuire la mia applicazione agli utenti finali.

Dare a un utente un JAR non è sempre facile da usare come vorrei e utilizzare Java WebStart richiede che io mantenga un server web.

Qual è il modo migliore per distribuire un’applicazione Java? Cosa succede se l’applicazione Java ha bisogno di installare risorse utente sul computer dell’utente? Ci sono dei buoni sistemi di installazione / confezionamento Java là fuori?

Solutions Collecting From Web of "Qual è il modo migliore per distribuire le applicazioni Java?"

Ci sono una varietà di soluzioni, a seconda dei tuoi requisiti di distribuzione.

  1. Basta usare un barattolo. Ciò presuppone che l’utente abbia installato la versione java corretta, altrimenti l’utente otterrà eccezioni di “class-file format version”. Questo va bene per la distribuzione interna all’interno di un’azienda.

  2. Usa launch4j e un programma di installazione come NSIS. Questo ti dà molto più controllo, anche se l’utente può ancora fare cose stupide come disinstallare java runtime. Questo è probabilmente l’approccio più popolare e quello che uso attualmente.

  3. Usa Webstart. Ciò presuppone anche che l’utente abbia installato la versione java corretta, ma è molto più facile andare avanti. La mia esperienza è che questo va bene per ambienti intranet strettamente controllati, ma diventa un problema con implementazioni più grandi perché ha alcuni strani fallimenti. Potrebbe migliorare con la nuova tecnologia plug-in in Java 1.7.

  4. Usa un compilatore di codice nativo come Excelsior JET e distribuiscilo come eseguibile o includilo in un programma di installazione. Costoso, e in genere ti lega a una versione leggermente più vecchia di java, e c’è qualche problema con il caricamento dinamico della class, ma è molto efficace per un’implementazione su larga scala in cui è necessario ridurre al minimo i problemi di supporto.

Converti Java in EXE – Perché, Quando, Quando Non e Come

Il programma di installazione avanzato semplifica la creazione di app java come eseguibili di Windows ed è abbastanza flessibile nel modo in cui è ansible configurarlo. Ho scoperto che per distribuire le applicazioni Java ai client Windows, questo è il modo più semplice per andare.

JSmooth è un semplice programma che prende il tuo contenitore e lo avvolge in un file eseguibile standard di Windows. Viene fornito con una semplice GUI che consente di configurare la JVM richiesta, di raggrupparla con l’applicazione o di fornire un’opzione per scaricarla se non è già installata. Puoi inviare il file ex così com’è o comprarlo con possibili dipendenze (o lasciare che il programma scarichi le dipendenze extra dalla rete all’avvio). È anche gratuito, come nella birra e nella parola, il che può (o non può) essere una buona cosa.

Dipende da quanto sono sofisticati i tuoi utenti target. Nella maggior parte dei casi si desidera isolarli dal fatto che si sta eseguendo un’applicazione basata su Java. Forniscili con un programma di installazione nativo che faccia la cosa giusta (crea voci del menu di avvio, lanciatori, registrati con aggiungi / rimuovi programmi, ecc.) E impacchetta già un runtime Java (quindi l’utente non ha bisogno di conoscerlo o preoccuparsene). Vorrei suggerire il nostro strumento di installazione multipiattaforma , BitRock InstallBuilder . Sebbene non sia basato su Java, viene comunemente utilizzato per il pacchetto di applicazioni Java. Può essere facilmente integrato con Ant e puoi creare programmi di installazione di Windows da Unix / Linux / Mac e viceversa. Poiché i programmi di installazione generati sono nativi, non richiedono un passaggio di auto-estrazione o un JRE per essere già presenti nel sistema di destinazione, il che significa piccoli programmi di installazione e ti risparmiano alcuni grattacapi. Vorrei anche menzionare che abbiamo licenze gratuite per progetti open source

i file eseguibili sono i migliori ma sono limitati dalla piattaforma, per esempio usa gcj: http://gcc.gnu.org/java/ per linux per produrre eseguibili e usa launch4j: http://launch4j.sourceforge.net/ per produrre file eseguibili di windows. Per il pacchetto su linux è ansible utilizzare qualsiasi rpm o deb packager. Per win32 prova http://en.wikipedia.org/wiki/Nullsoft_Scriptable_Install_System

Se si tratta di una vera GUI, con l’applicazione per l’utente finale, è necessario ignorare la lanaguage in cui è stato scritto il programma (Java) e utilizzare un programma di installazione nativo per ciascuna delle piattaforms scelte. I Mac vogliono un file .dmg e su Windows un .msi o un programma di installazione .exe è la strada da percorrere. Su Windows preferisco NSIS da NullSoft solo perché è meno discutibile di InstallShield o InstallAnywhere. Su OSX puoi contare sulla JVM già presente. Su Windows dovrai controllarlo e installarlo per loro, se necessario. Le persone Linux non eseguono applicazioni GUI Java, e le poche che lo faranno sapranno cosa fare con un file eseguibile .jar.

Anche se non ho mai utilizzato NSIS (Nullsoft Scriptable Installer System), ci sono degli script di installazione che controlleranno se il JRE richiesto è installato o meno nel sistema di destinazione.

Molti script di esempio sono disponibili negli esempi di codice e nelle pagine di Real World Installers , come ad esempio:

  • Java Launcher con installazione JRE automatica
  • Script di download di Java Runtime semplice

(Si noti che in realtà non ho usato nessuno degli script, quindi per favore non prenderlo come un avallo.)

Avevo bisogno di un modo per impacchettare il mio progetto e le sue dipendenze in un unico file jar.

Ho trovato ciò di cui avevo bisogno usando il plug-in Maven2 Assembly : il plug-in Maven2 Assembly

Questo sembra duplicare la funzionalità di one-jar , ma non richiede alcuna configurazione aggiuntiva per farlo funzionare.

Per le semplici app Java mi piace usare Jar. È molto semplice distribuire un file su cui un utente può semplicemente fare clic su (Windows) o

java -jar jarname.jar 

IMHO, jar è la strada da percorrere quando la semplicità è un requisito principale.

Sviluppo applicazioni RCP di eclipse. Normalmente per avviare un’applicazione Eclipse è incluso un lanciatore eseguibile. Includo la macchina virtuale java all’interno della cartella dell’applicazione in una sottodirectory / jre per garantire che venga utilizzata la giusta versione java.

Quindi eseguiamo il pacchetto con Inno Setup per l’installazione sul computer dell’utente.

Qual è il modo migliore per distribuire un’applicazione Java? Cosa succede se l’applicazione Java ha bisogno di installare risorse utente sul computer dell’utente? Ci sono dei buoni sistemi di installazione / confezionamento Java là fuori?

Nella mia esperienza (dalla valutazione di un numero di opzioni ), install4j è una buona soluzione. Crea programmi di installazione nativi per qualsiasi piattaforma ed è specificamente orientato all’installazione di app Java. Per i dettagli, vedere ” Funzionalità ” sul proprio sito Web.

install4j è uno strumento commerciale, però. Soprattutto se le tue esigenze sono relativamente semplici (basta distribuire un’applicazione e installare alcuni artefatti), esistono molte altre buone opzioni, incluse quelle gratuite (come izPack o la già citata Lauch4j ). Ma tu hai chiesto il modo migliore , e alla mia attuale conoscenza install4j è quella, specialmente per la distribuzione di applicazioni Java (EE) più grandi o più complicate.

La migliore risposta dipende dalla piattaforma. Per la distribuzione su Windows, ho ottenuto buoni risultati utilizzando una combinazione di one-jar e launch4j . Ci è voluto un po ‘di tempo per configurare correttamente il mio ambiente di compilazione (principalmente gli script delle formiche), ma ora è abbastanza indolore.

Dal mio punto di vista, il meccanismo di distribuzione superiore è quello di utilizzare qualcosa come ClickOnce o la tecnologia WebStart . Basta distribuire la versione sul server e questa viene automaticamente inviata ai client quando viene rilasciata la versione. Anche la piattaforma RCP di Eclipse contiene UpdateManager che fa ciò che fa WebStart, ma anche molto di più.

Dato che sto usando Maven2 per la costruzione, la distribuzione è solo un gioco da ragazzi: copia il jar costruito nella posizione sul server, aggiorna il file jnlp se necessario e il gioco è fatto.

installanywhere è buono ma costoso – non ho trovato (come) una buona gratis

Vorrei comprimere il file jar insieme ad altri jar dipendenti, file di configurazione e documentazione insieme a run.bat / run.sh. L’utente finale dovrebbe essere in grado di decomprimerlo in qualsiasi posizione e modificare run.bat se necessario (dovrebbe essere eseguito senza modifiche nella maggior parte dei casi). Un programma di installazione può essere utile se si desidera creare voci nel menu Start, sul desktop, nella barra delle applicazioni, ecc.

Come utente preferisco decomprimere ed eseguire il tipo di installazione (nessuna voce del menu di avvio per favore). Tuttavia, le persone al di fuori del settore IT possono avere preferenze diverse. Quindi, se l’applicazione è in gran parte rivolta agli sviluppatori, zip-run.bat route e le applicazioni per il pubblico possono essere installate utilizzando un programma di installazione.