Quelle est la meilleure façon de partager des Pots à travers de multiples projets?
Lorsque vous avez plusieurs projets qui utilisent le même ensemble de POT de bibliothèques, il est fastidieux d'inclure les mêmes Pots à maintes reprises et à chaque projet. Si je suis en train de travailler sur de 20 projets différents, je préfère ne pas en avoir 20 de la même exacte ensemble de fichiers JAR qui traînent. Quelle est la meilleure façon de faire de tous ces projets (et de nouveaux projets ainsi) de référence à la même série de Pots?
J'ai quelques idées, mais chacun d'eux a des inconvénients:
- Lieu tous les Pots dans un dossier pour chaque projet dans ce dossier.
- À l'aide d'Eclipse, créez un Utilisateur "Bibliothèque" et demandez à chaque projet de référence de l'utilisateur de la bibliothèque.
- Créer une "Bibliothèque" du projet que les références de chaque POT, chaque référence de projet qui projet de bibliothèque.
- le problème avec l'utilisateur libs est que chaque utilisateur doit les mettre en place. si vous utilisez lib projets, vous pouvez les vérifier et tout le monde est certainement en utilisant la même version de toutes les dépendances
Vous devez vous connecter pour publier un commentaire.
Utilisation Maven ou Ivy pour gérer ces pots. Si vous êtes méfier de l'évolution de vos projets trop, vous pouvez simplement utiliser Ivy pour gérer le supplément de chemin de classe pour vous.
Les deux ont de bons plugins Eclipse:
m2eclipse
Maven classpath conteneur http://img229.imageshack.us/img229/4848/mavendependencies.png
IvyDE
IvyDE classpath conteneur http://img76.imageshack.us/img76/3180/cpnode.jpg
que j'ai utilisé avec de bons résultats.
Vous remarquerez que les deux d'entre eux de référence pots à l'extérieur l'espace de travail, de sorte que la duplication est supprimée.
Mise à jour ( invité par les commentaires ):
Ma raison de recommander cette approche est que je crois fermement que c'est plus simple et plus clair pour déclarer dépendances plutôt que de l'inclure manuellement eux. Il y a un petit temps coût associé à cette - petits pour Ivy que pour Maven, mais dans le long terme, elle est payante.
Un autre, plus petit, l'avantage est la manipulation des transitifs et des conflits de dépendances. Il est facile d'oublier pourquoi vous avez besoin que commons-logging-1.1.jar dans le classpath et si vous devez mettre à niveau vers 1.1.1. Et aussi, c'est pas amusant à tirer dans tous les depencies nécessaire pour par exemple Hibernate + Annotation + Ressort combo. L'accent sur la programmation, et non de la construction.
Croyez le ou non, votre 'pénible' approche est probablement la plus simple, la plus propre et moins de temps approche, il est.
Avant de sauter sur le maven train en marche, vous devriez considérer ce qui est vraiment mal à faire les choses de la façon dont vous êtes en train de faire leur. Vous avez mentionné qu'il est fastidieux et que vous avez beaucoup de fichiers jar qui traînent. J'ai créé le processus de construction sur une grande multi-projet de module à l'aide de Maven ensuite passé 18 mois en luttant avec elle en permanence. Croyez-moi, c'était fastidieux et il y avait beaucoup de fichiers jar qui traînent.
Depuis le retour à la Fourmi et de commettre des pots de contrôle de la source aux côtés de la les projets qui les utilisent, il a été un beaucoup plus confortable.
- Je stocker un tas de fichiers jar dans un seul répertoire sur ma machine, et puis quand je créer un nouveau projet ou besoin d'ajouter un nouveau pot à un projet existant, il ne prend environ 30 secondes:
Au cours d'un projet, que 30 secondes est insignifiant, mais il signifie que j'ai un projet qui peut être vérifié de source de contrôle et fonctionne sans nécessiter aucune personnalisé Eclipse ou de configuration de Maven installations ou à l'utilisateur de l'installation.
Cette approche a sauvé de moi et de mon équipe de projet une énorme quantité de temps, principalement parce qu'il est simple, fiable et facile à comprendre.
Mise à jour: Clarification invité par les commentaires
@Robert Munteanu: Merci pour les commentaires et la mise à jour des commentaires. Cela peut sembler un peu argumentatif, mais je crains que je ne peux pas d'accord avec vous que Maven est plus simple et plus claire, ou qu'elle vous fera économiser temps dans le long terme.
De votre publication:
"Je crois fermement que c'est plus simple et plus clair pour déclarer les dépendances plutôt que de l'inclure manuellement eux. Il y a un petit temps coût associé à cette - petits pour Ivy que pour Maven, mais dans le long terme, elle est payante."
Il peut être plus facile d'avoir Maven télécharger un fichier jar pour vous que d'avoir à les télécharger vous-même, mais c'est le seul avantage. Sinon Maven n'est pas plus simple, pas plus claire et de ses complexités et limitations ne vous coûtera à long terme.
Clarté
Les deux de la dépendance des déclarations ci-dessous faire la même chose. Je trouve la Fourmi, l'un beaucoup plus claire que Maven un.
Ant Style:
Maven Style:
Simplicité
Avec la Fourmi version, vous pouvez passer la souris sur l' ${log4j.jar} la propriété et il vous montrera le chemin absolu vers le fichier jar. Vous pouvez rechercher pour l'utilisation de la compilation.classpath. Il n'y a pas un ensemble beaucoup plus que vous devez savoir.
Il n'est pas question que Maven est plus complexe que l'approche que je dis. Lorsque vous commencez avec Maven ces sont quelques-unes des questions qui doivent être répondues.
Dépendances Transitives
"Un autre, plus petit, l'avantage est la manipulation des transitifs et dépendances conflictuelles."
Dans mon expérience, les dépendances transitives sont plus d'ennuis que ce qu'ils valent. Vous vous retrouvez avec plusieurs versions du même fichier jar et vous vous retrouvez avec, en option, les fichiers jar que vous ne souhaitez pas. J'ai fini par déclarer à peu près tout avec champ pour éviter les tracas.
Long Terme De Paiement
"L'accent sur la programmation, et non de la construction."
Je suis d'accord. Depuis le retour de la Fourmi et de mettre mes fichiers jar dans le contrôle de code source, j'ai pu passer à loin moins de temps à traiter avec des problèmes de génération.
Ce sont les choses, je passe moins de temps à faire:
De toute façon, désolé pour la longue affichage. Peut-être que maintenant que j'ai mis hors de ma poitrine, je peux apporter une certaine fermeture à ma longue et douloureuse Maven expérience. 🙂
Cela dépend de vos besoins, mais il y a plusieurs options viables. Mon travail s'appuie sur un dossier externe, et tous les projets de référence de ce dossier, ce qui rend la vie plus facile l'exécution construit en dehors d'eclipse. Un utilisateur de la bibliothèque est un peu plus agréable façon de faire les choses, aussi longtemps que vous n'avez pas l'esprit de la légère éclipse de dépendance. Je ne vois pas beaucoup d'avantages à un projet de bibliothèque sur son propre, mais si vous avez une sorte d'universel 'util' type de projet que tous les autres projets déjà en charge, vous pouvez simplement mettre tous les bocaux dans ce projet.
Une approche consiste à mettre tous vos fichiers jar dans un emplacement sur votre ordinateur, dans votre environnement de développement eclipse, définir une variable d'environnement, de dire LIB_LOCATION qui pointe vers ce dossier et d'avoir vos projets utilisent les pots par rapport à cette variable. De cette façon, vous obtenez la facilité d'utilisation, pas de multiples pots, portable sur l'ensemble des machines, aussi longtemps que vous avez la variable définie correctement. J'ai essayé de maven pour un groupe de taille décente projets et il semble que je dois me battre au moins autant que j'en ai l'habitude. Bugs et câblé comportements dans le plug-ins, m2eclipse et q4eclipse.
Vous pouvez modifier le "Installé Jre" pour inclure votre fichier JAR ("Add external JARs"), ajouter le fichier jdk\jre\lib\ext\ répertoire ou d'indiquer une variable d'environnement CLASSPATH contenant le chemin d'accès.
Je vous recommande la "bibliothèque" démarche de projet.
Mais encore mieux -- séparé lib projet par external jar -- cela vous permet de suivre deps entre le tiers et des pots et des savons ce qui doit changer lorsque vous effectuez une mise à niveau d'une dépendance.
Assurez-vous de vérifier dans ces projets, afin que tous les utilisateurs utilisent la même version de tiers libs et donc, vous pouvez facilement générer une version de logiciel (utiliser des tags/les étiquettes dans votre contrôle de version de groupe de versions de projets qui vont de pair)
Nous avons décidé sur un plus fastidieuse de la méthode, mais qui nous permet d'avoir tout le travail en interne, mais ne fonctionnera probablement bien pour un petit groupe de développeurs.
Chaque ensemble de fichiers jar est mis en place un projet Eclipse nommés correctement après le pot ensemble, ajouté à la build path, source de pots et de la javadoc pots de définir correctement sur chaque pot dans le build path, et chaque projet comprend les projets de bibliothèque nécessaires pour ce projet. Le résultant multi-espace de travail de projet est ensuite exporté en ProjectSet.psf fichier qui peut ensuite être lu dans un raw Eclipse apportant dans l'ensemble de l'espace de travail nouveau. Ensuite, nous avons tous les projets ci-dessus dans le CVS, y compris les fichiers jar.
Cela a fonctionné très wellf ou nous.
Si vous êtes dans une grande entreprise, la gestion des dépendances de Maven peut bien travailler pour vous. Vous devriez avoir un cache local des artefacts de sorte que le monde entier ne s'arrête pas si votre connexion internet est perdue.
Également de noter que la nouvelle Eclipse 3.5 sortir cet été, il y aura un Créer Runnable Jar" qui permet d'envoyer le besoin de pots à côté de l'exécutable généré bocal et l'ensemble de la Classe-ligne de Chemin d'accès dans le Manifeste correctement. Je pense que cela va être un gros gain de temps - check it out.