2008-11-19 5 views
12

J'écris une application java en utilisant eclipse qui fait référence à quelques jarres externes et nécessite que certains fichiers de configuration soient accessibles par l'utilisateur.Quel est le meilleur moyen d'empaqueter une application Java avec beaucoup de dépendances?

  1. Quelle est la meilleure façon de l'empaqueter pour le déploiement? Ma compréhension est que vous ne pouvez pas mettre Jars dans un autre fichier jar, est-ce correct? Puis-je conserver mes fichiers de configuration hors des pots et les référencer dans le code? Ou le chemin vers le fichier de configuration doit-il être un argument de ligne de commande?

  2. Y a-t-il des plugins tiers pour eclipse pour vous faciliter la tâche? J'utilise un fichier de construction de fourmi pour le moment mais je ne suis pas sûr de savoir ce que je fais. Y at-il un équivalent des projets de déploiement dans Visual Studio, qui va trouver tout ce dont vous avez besoin et juste faire un installateur? J'ai déjà utilisé install4j, et il était puissant si non aussi proche que les projets de déploiement .Net.

Cheers.

Répondre

6

Il n'y a pas de «meilleur moyen». Cela dépend si vous déployez une application swing, un webstart, une applet, une bibliothèque ou une application Web. Chacun est différent.

Au point 2, vous avez raison. Les fichiers Jar ne peuvent pas contenir d'autres fichiers JAR. (Eh bien, techniquement, ils peuvent, c'est juste que le fichier jar interne ne sera pas sur votre chemin de classe, signifiant effectivement que les fichiers jar ne contiennent pas de fichiers jar).

Au point 3, vous pouvez certainement référencer des fichiers de configuration en dehors du fichier jar. Vous pouvez généralement référencer un fichier de configuration en tant que fichier ou ressource. Si vous utilisez l'approche par ressource, elle provient généralement du classpath (peut être dans un pot). Si vous utilisez un fichier, vous spécifiez le nom du fichier (pas dans un fichier jar).

En général, la plupart des développeurs Java utilisent Apache Ant pour effectuer le déploiement. C'est bien documenté, alors jetez un oeil.

+0

Au point 5, Maven (bien que nécessitant une certaine configuration, mais pas beaucoup), gère vos dépendances. –

0

Ant. Ce n'est pas la meilleure chose au monde, mais c'est standard, c'est apache, et ça marche. Il y a quelques bons exemples sur le web pour faire un simple build.xml pour n'importe qui, et il a quelques fonctionnalités comme la tâche 'war' qui sait comment mettre toutes les choses de base (classes, web.xml etc) dans le pot fichier pour vous. Vous pouvez également lui dire de prendre d'autres fichiers de configuration et des bocaux et il le fera heureusement. Il est également très intelligent sur ce qu'il faut compiler. Vous lui donnez un répertoire, et il trouve tous les fichiers java et les construit seulement si leur classfile est obsolète, donc vous obtenez gratuitement quelques fonctionnalités de make traditionnelles.

+0

Si vous allez voter le gars au moins commenter pour me dire pourquoi c'est un mauvais conseil? –

6

(1) Une alternative à la fourmi que vous pouvez envisager est maven.

Une brève introduction à maven peut être trouvée here. Pour construire un JAR, maven a le plugin jar, qui peut automatiser le processus pour s'assurer que tous les jar dépendants sont listés dans le manifeste de votre pot. Si vous utilisez eclipse, téléchargez également le maven integration.

(2) Une autre alternative est d'utiliser OneJar (avertissement: ne l'ai pas essayé moi-même).

+0

Étant donné que vous exécutez une application autonome à partir des sons de ce OneJar serait ma recommandation définitive. L'un des avantages est qu'il vous permettra d'exécuter l'application dans Windows en double-cliquant sur le pot. –

0

Vous pouvez consulter d'autres projets Java (par exemple, JMeter, SquirrelSQL, JEdit, Cernunnos, etc.). Chaque paquet contient leurs applications différemment, alors considérez vos objectifs lorsque vous les réviserez.

3

Les réponses varient en fonction de ce que vous construisez.

Si vous créez une bibliothèque, il est préférable de distribuer votre travail sous forme de fichier jar. Il est possible de se référer à vos dépendances jar via l'attribut Class-path dans votre manifeste jar, bien que je pense généralement que c'est pas cool. Cet attribut a été conçu pour les applets et il est rarement utilisé dans les librairies lorsque cette technique place des éléments dans le classpath (en particulier des éléments courants que l'utilisateur pourrait déjà utiliser), vous pouvez obtenir des conflits de version inattendus. Et c'est difficile de savoir pourquoi vous les voyez.

La publication d'un fichier jar dans un référentiel Maven avec pom info pour le suivi des dépendances est également un excellent choix pour les bibliothèques. Si vous faites cela, veuillez publier vos coordonnées Maven dans vos documents!

Si vous créez une application, les deux choix les plus courants sont de distribuer une structure de déploiement zip/tar/quelconque OU d'utiliser un programme d'installation. Si le programme est un genre de chose serveur, le premier est beaucoup plus commun. Ce dernier est plus commun pour les clients. Généralement, le programme d'installation va simplement mettre en page la structure de déploiement et peut-être effectuer des tâches supplémentaires comme l'installation dans des emplacements spécifiques au système d'exploitation.

Pour créer votre structure de déploiement ("kit"), vous devez créer un processus répétable dans le système de construction que vous utilisez. Ant a des exemples copieux de cela et Maven a les plugins d'assemblage qui peuvent aider. Généralement, vous voudrez inclure un jar de votre code, des dépendances, des scripts pour démarrer le programme, peut-être un JRE, et toutes les autres ressources dont vous pourriez avoir besoin.

Si vous souhaitez créer un installateur, il existe de nombreuses options gratuites et commerciales. Certaines personnes que je connais ont récemment eu de bonnes expériences avec le IzPack libre mais vérifiez vos options.

1

Eh bien, si vous parlez du déploiement d'une application de bureau autonome:

Avant nous sommes passés à web commencer nous avons créé trois archives de déploiement, une pour Windows, un pour Mac et un pour les autres plates-formes .

Sur les fenêtres nous avons utilisé avec succès le Nullsoft Scriptable Install System (connu pour son utilisation par les anciennes versions de winamp) et son ant task, bien que certains inconvénients sont:

  • Il est utilisable uniquement sur les fenêtres AFAIR
  • Vous avez AFAIR

Il est possible de créer une installation Windows avec les entrées du menu Démarrer. Il existe également un plugin eclipse pour l'édition de scripts shell NSIS intégrée.

Sur Mac OS X, il existe un ant task pour créer un fichier .app à partir de vos fichiers java afin de pouvoir le démarrer comme une application os x native. Mais attention à ne pas écrire de paramètre dans votre répertoire personnel et à utiliser le répertoire de l'application à la place.

Pour d'autres, vous devez vous attendre à ce qu'ils soient dans un environnement x * env et déployer votre application avec un script shell pour démarrer l'application.

Dans tous les cas, vous devrez peut-être déployer votre policy file personnalisé pour obtenir des droits d'accès pour votre application.

Si vous voulez vous débarrasser de tout l'emballage et des choses que vous devriez sérieusement envisager d'utiliser web start. Nous avons économisé beaucoup de temps depuis le passage à ce, par exemple simplifié notre processus de déploiement, prend soin des mises à jour, etc.

Mise à jour 2014

Utilisez maven assembly plugin, voir la section « Création d'un pot exécutable »

3

Vous devrait essayer FatJar. C'est un plugin Eclipse qui, avec un clic droit sur le projet, peut créer un fichier JAR avec tout ce dont vous avez besoin pour exécuter l'application, y compris le fichier JAR nécessaire.

Nous l'utilisons tous les jours, en conjonction avec JSmooth pour créer les exécutables, pour déployer nos progiciels à nos clients, et fonctionne comme un charme.

Questions connexes