web-dev-qa-db-fra.com

Quelle est la meilleure façon de distribuer les applications Java?

Java est l'un de mes langages de programmation de choix. Je rencontre toujours le problème de distribuer mon application aux utilisateurs finaux.

Donner à un utilisateur un JAR n'est pas toujours aussi convivial que je le souhaiterais et utiliser Java WebStart nécessite que je maintienne un serveur Web.

Quelle est la meilleure façon de distribuer une application Java? Et si l'application Java doit installer des artefacts sur l'ordinateur de l'utilisateur? Y a-t-il une bonne Java systèmes d'installation/d'emballage là-bas?

113
Laplie Anderson

Il existe une variété de solutions, selon vos besoins de distribution.

  1. Utilisez simplement un pot. Cela suppose que l'utilisateur dispose de la bonne version Java version installée, sinon l'utilisateur obtiendra des exceptions de "version de format de fichier de classe". Ceci est très bien pour la distribution interne au sein d'une entreprise.

  2. Utilisez launch4j et un programme d'installation comme NSIS. Cela vous donne beaucoup plus de contrôle, bien que l'utilisateur puisse toujours faire des choses stupides comme désinstaller le runtime Java. C'est probablement l'approche la plus populaire et ce que j'utilise actuellement.

  3. Utilisez Webstart. Cela suppose également que l'utilisateur dispose de la bonne version Java version installée, mais c'est beaucoup plus facile de commencer. D'après mon expérience, cela convient aux environnements intranet étroitement contrôlés, mais devient difficile avec de plus grands déploiements car il a de nombreux échecs étranges. Il peut s'améliorer avec la nouvelle technologie de plug-in dans Java 1.7.

  4. Utilisez un compilateur de code natif comme Excelsior JET et distribuez-le en tant qu'exécutable, ou enveloppez-le dans un programme d'installation. Cher, et il vous lie généralement à une version légèrement plus ancienne de Java, et il y a un peu de difficulté avec le chargement de classe dynamique, mais c'est très efficace pour un déploiement à grande échelle où vous devez minimiser vos tracas de support.

86
Noel Grandin
9
Dmitry Leskov

programme d'installation avancé facilite le package Java apps en exécutables Windows, et il est assez flexible dans la façon dont vous pouvez le configurer. J'ai trouvé que pour distribuer = Java applications aux clients Windows, c'est la façon la plus simple de procéder.

5
rustyshelf

JSmooth est un programme simple qui prend votre pot et l'enveloppe dans un fichier exécutable Windows standard. Il est livré avec une interface graphique simple qui vous permet de configurer la JVM requise, de la regrouper avec l'application ou de fournir une option pour la télécharger si elle n'est pas déjà installée. Vous pouvez envoyer le fichier exe tel quel ou le compresser avec les dépendances possibles (ou laisser le programme télécharger les dépendances supplémentaires à partir du net au démarrage). C'est aussi gratuit, comme dans la bière et la parole, ce qui peut (ou non) être une bonne chose.

4
stian

Cela dépend de la sophistication de vos utilisateurs cibles. Dans la plupart des cas, vous souhaitez les isoler du fait que vous exécutez une application basée sur Java. Donnez-leur un programme d'installation natif qui fait la bonne chose (créer des entrées de menu de démarrage, des lanceurs, s'inscrire avec des programmes d'ajout/suppression, etc.) et regroupe déjà un Java runtime (donc l'utilisateur ne le fait pas Je voudrais suggérer notre outil d'installation multiplateforme, BitRock InstallBuilder . Bien qu'il ne soit pas basé sur Java, il est couramment utilisé pour empaqueter Java applications. Il peut être facilement intégré à Ant et vous pouvez créer des programmes d'installation Windows à partir d'Unix/Linux/Mac et inversement. Comme les programmes d'installation générés sont natifs, ils ne nécessitent pas d'étape d'auto-extraction ou de JRE être déjà présent dans le système cible, ce qui signifie des installateurs plus petits et vous évite des maux de tête. Je voudrais également mentionner que nous avons des licences gratuites pour les projets open source

4
Daniel Lopez

les fichiers exécutables sont les meilleurs mais ils sont limités à la plate-forme, c'est-à-dire utiliser gcj: http://gcc.gnu.org/Java/ pour que linux produise des exécutables et utilise launch4j: http: // launch4j .sourceforge.net / pour produire des exécutables Windows. Pour empaqueter sur linux, vous pouvez utiliser n'importe quel paqueteur rpm ou deb. Pour win32, essayez http://en.wikipedia.org/wiki/Nullsoft_Scriptable_Install_System

3
zurk

S'il s'agit d'une véritable application utilisateur final dotée d'une interface graphique, vous devez ignorer le langage dans lequel vous avez écrit le programme (Java) et utiliser un programme d'installation natif pour chacune des plates-formes choisies. Les utilisateurs de Mac veulent un .dmg et sur Windows un installateur .msi ou .exe est la voie à suivre. Sur Windows, je préfère NSIS de NullSoft uniquement parce qu'il est moins répréhensible que InstallShield ou InstallAnywhere. Sur OSX, vous pouvez compter sur la JVM déjà présente. Sous Windows, vous devrez vérifier et l'installer pour eux si nécessaire. Les gens de Linux n'exécuteront pas Java GUI applications, et les quelques-unes qui le savent, quoi faire avec un exécutable .jar.

3
Ry4an Brase

Bien que je n'aie pas utilisé NSIS (Nullsoft Scriptable Installer System) moi-même, il existe des scripts d'installation qui vérifieront si le JRE requis est installé sur la cible système.

De nombreux exemples de scripts sont disponibles sur les pages Exemples de code et Installateurs du monde réel , tels que:

(Veuillez noter que je n'ai utilisé aucun des scripts, veuillez donc ne pas le prendre comme une approbation.)

3
coobird

J'avais besoin d'un moyen de regrouper mon projet et ses dépendances dans un seul fichier jar.

J'ai trouvé ce dont j'avais besoin en utilisant le plugin Maven2 Assembly: Maven2 Assembly plugin

Cela semble dupliquer la fonctionnalité de one-jar , mais ne nécessite aucune configuration supplémentaire pour le faire fonctionner.

2
David Carlson

Pour les applications simples Java j'aime utiliser Jar. Il est très simple de distribuer un fichier sur lequel un utilisateur peut simplement cliquer (Windows), ou

Java -jar jarname.jar

À mon humble avis, le pot est la voie à suivre lorsque la simplicité est une exigence principale.

1
jjnguy

Je développe des applications Eclipse RCP. Normalement, pour démarrer une application Eclipse, un lanceur exécutable est inclus. J'inclus la machine virtuelle Java dans le dossier d'application dans un sous-répertoire/jre pour m'assurer que la bonne version Java sera utilisée).

Ensuite, nous emballons avec Inno Setup pour l'installation sur la machine de l'utilisateur.

1
Mario Ortegón

Quelle est la meilleure façon de distribuer une application Java? Et si l'application Java doit installer des artefacts sur l'ordinateur de l'utilisateur? Y a-t-il une bonne Java systèmes d'installation/d'emballage là-bas?

D'après mon expérience (de évaluation d'un certain nombre d'options ), install4j est une bonne solution. Il crée des programmes d'installation natifs pour n'importe quelle plate-forme et est spécifiquement conçu pour installer des applications Java. Pour plus de détails, voir " Fonctionnalités " sur son site Web.

install4j est cependant un outil commercial. Surtout si vos besoins sont relativement simples (il suffit de distribuer une application et d'installer des artefacts), de nombreuses autres bonnes options existent, y compris des options gratuites (comme izPack ou déjà mentionnées Lauch4j ) . Mais vous avez demandé la meilleure façon , et à ma connaissance, install4j est la meilleure, en particulier pour distribuer plus ou moins compliqué Java (EE) apps.

1
Jonik

La meilleure réponse dépend de la plateforme. Pour le déploiement sur Windows, j'ai obtenu de bons résultats en utilisant une combinaison de one-jar et launch4j . Cela a pris un peu de temps pour configurer correctement mon environnement de construction (scripts ant, principalement) mais maintenant c'est assez indolore.

0
qualidafial

Eh bien, de mon point de vue, le mécanisme de distribution supérieur consiste à utiliser quelque chose comme la technologie ClickOnce ou WebStart . Vous venez de déployer la version sur le serveur et elle parvient automatiquement aux clients lorsque la version est publiée. La plate-forme Eclipse RCP contient également UpdateManager qui fait ce que WebStart fait, mais aussi beaucoup plus.

Étant donné que j'utilise Maven2 pour la construction, le déploiement n'est qu'un morceau de gâteau: copiez le pot intégré à l'emplacement sur le serveur, mettez à jour le fichier jnlp si nécessaire et vous avez terminé.

0
Petr Macek

installanywhere est bon mais cher - je n'ai pas trouvé (comme) un bon gratuit

0
Tom