it-swarm.it

Qual è il modo migliore per distribuire Java?

Java è uno dei miei linguaggi di programmazione preferiti. Ho sempre riscontrato il problema di distribuire la mia applicazione agli utenti finali.

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

Qual è il modo migliore per distribuire un Java? Cosa succede se l'applicazione Java deve installare artefatti sul computer dell'utente? Esistono buoni Java sistemi di installazione/packaging là fuori?

113
Laplie Anderson

Esistono diverse soluzioni, a seconda delle esigenze di distribuzione.

  1. Usa solo un barattolo. Ciò presuppone che l'utente abbia la corretta Java installata, altrimenti l'utente riceverà eccezioni "versione formato file classe". 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à un controllo molto maggiore, anche se l'utente può ancora fare cose stupide come disinstallare il runtime Java. Questo è probabilmente l'approccio più popolare e quello che attualmente uso.

  3. Usa Webstart. Questo presuppone anche che l'utente abbia la corretta Java installata, ma è molto più facile andare avanti. La mia esperienza è che questo va bene per ambienti intranet strettamente controllati, ma diventa un problema con più grandi implementazioni perché presenta alcuni strani errori. Potrebbe migliorare con la nuova tecnologia plug-in in Java 1.7.

  4. Utilizzare un compilatore di codice nativo come Excelsior JET e distribuirlo come eseguibile oppure racchiuderlo in un programma di installazione. Costoso, e generalmente ti lega a una versione leggermente più vecchia di Java, e c'è qualche problema con il caricamento dinamico delle classi, ma è molto efficace per la distribuzione su larga scala in cui è necessario ridurre al minimo i problemi di supporto.

86
Noel Grandin
9
Dmitry Leskov

programma di installazione avanzata semplifica il pacchetto Java come eseguibili di Windows ed è abbastanza flessibile nel modo in cui è possibile configurarlo. Ho scoperto che per la distribuzione = Java applicazioni per client Windows, questo è il modo più semplice di procedere.

5
rustyshelf

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

4
stian

Dipende da quanto sono sofisticati i tuoi utenti target. Nella maggior parte dei casi si desidera isolarli dal fatto che si sta eseguendo un'app basata su Java. Forniscili con un programma di installazione nativo che faccia la cosa giusta (crea voci di menu di avvio, lanciatori, registrati con programmi di aggiunta/rimozione, ecc.) E già raggruppa un Java runtime (quindi l'utente non bisogno di sapere o preoccuparsene). Vorrei suggerire il nostro strumento di installazione multipiattaforma, BitRock InstallBuilder . Sebbene non sia basato su Java, è comunemente usato per pacchetto Java applicazioni. 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 autoestrazione o un JRE essere già presente nel sistema di destinazione, il che significa installatori più piccoli e ti fa risparmiare un po 'di mal di testa. Vorrei anche menzionare che abbiamo licenze gratuite per progetti open source

4
Daniel Lopez

i file eseguibili sono i migliori ma sono limitati dalla piattaforma, ad esempio utilizzare gcj: http://gcc.gnu.org/Java/ affinché Linux produca eseguibili e usi launch4j: http: // launch4j .sourceforge.net / per produrre file eseguibili di Windows. Per impacchettare su linux puoi usare qualsiasi rpm o deb packager. Per win32 provare http://en.wikipedia.org/wiki/Nullsoft_Scriptable_Install_System

3
zurk

Se si tratta di una vera applicazione per l'utente finale con interfaccia grafica, è necessario ignorare il linguaggio in cui è stato scritto il programma (Java) e utilizzare un programma di installazione nativo per ciascuna delle piattaforme scelte. I Mac vogliono un .dmg e su Windows un programma di installazione .msi o .exe è la strada da percorrere. Su Windows preferisco NSIS di 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 eseguiranno Java applicazioni GUI, e le poche che sapranno, cosa fare con un eseguibile .jar.

3
Ry4an Brase

Anche se non ho usato NSIS (Nullsoft Scriptable Installer System) da solo, ci sono script di installazione che verificheranno se il JRE richiesto è installato sulla destinazione sistema.

Molti script di esempio sono disponibili dalle pagine esempi di codice e installatori del mondo reale , come ad esempio:

(Si prega di notare che non ho effettivamente utilizzato nessuno degli script, quindi per favore non prenderlo come un'approvazione.)

3
coobird

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

Ho trovato quello che mi serviva usando il plugin Maven2 Assembly: Maven2 Assembly plugin

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

2
David Carlson

Per semplici Java mi piace usare Jar's. È molto semplice distribuire un file su cui un utente può semplicemente fare clic (Windows), oppure

Java -jar jarname.jar

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

1
jjnguy

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

Quindi impacchettiamo con Inno Setup per l'installazione sul computer dell'utente.

1
Mario Ortegón

Qual è il modo migliore per distribuire un Java? Cosa succede se l'applicazione Java deve installare artefatti sul computer dell'utente? Esistono buoni Java sistemi di installazione/packaging là fuori?

Nella mia esperienza (da valutazione di una serie di opzioni ), install4j è una buona soluzione. Crea programmi di installazione nativi per qualsiasi piattaforma ed è specificamente orientato all'installazione Java. Per i dettagli, vedere " Funzionalità " sul suo sito Web.

install4j è comunque uno strumento commerciale. 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 quelle già menzionate Lauch4j ) . Ma hai chiesto il modo migliore e, per quanto mi risulta attualmente, install4j è quello, in particolare per la distribuzione di dimensioni maggiori o più complicate Java (EE) app.

1
Jonik

La risposta migliore dipende dalla piattaforma. Per la distribuzione su Windows, ho ottenuto buoni risultati usando una combinazione di one-jar e launch4j . Ci è voluto un po 'di tempo per impostare correttamente il mio ambiente di build (script di formiche, per lo più) ma ora è abbastanza indolore.

0
qualidafial

Bene dal mio punto di vista, il meccanismo di distribuzione superiore consiste nell'utilizzare qualcosa come ClickOnce , oppure WebStart technology. 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ù.

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

0
Petr Macek

installanywhere è buono ma costoso - non ho trovato (come) buono gratuito

0
Tom