2009-02-16 4 views
2

Nous avons une bibliothèque de base que nous incluons en JAR avec toutes nos applications Web pour maximiser la réutilisation du code. Nous souhaitons maintenant inclure certaines fonctionnalités dans cette bibliothèque principale via une bibliothèque tierce (iText). L'ajout de l'iText JAR à la bibliothèque principale ne fonctionne pas car les fichiers JAR imbriqués ne sont pas détectés par le chargeur de classe. Nous ne voulons pas ajouter le fichier iText JAR à chaque application Web, car les applications Web n'utilisent pas iText. Ils utilisent une bibliothèque qui utilise iText. Sémantique? Peut-être, mais en ajoutant des fichiers JAR tiers à une application Web, une bibliothèque utilisée peut accéder aux classes du fichier JAR. Est-ce qu'il me manque une pratique simple qui résout ce problème ou est-ce que les chargeurs de classes personnalisées et jar-fusion sont les meilleures approches?Meilleure pratique pour inclure des jar tiers dans une bibliothèque de base?

Répondre

1

Un EAR serait probablement la chose appropriée pour cela. Rien de tel qu'une autre couche d'indirection.

2

Bienvenue dans JAR hell, un problème continu dans le développement Java, et l'une des principales raisons pour lesquelles OSGi prend de l'ampleur. Les approches «désordonnées» sont courantes dans l'industrie jusqu'à très récemment, et les coûts des approches propres peuvent largement compenser le coût de l'approche rapide et polluante. Mais pour répondre à votre question, la plupart des serveurs d'applications ont un endroit où vous pouvez placer des JAR qui sont accessibles à travers toutes les applications Web. Tomcat, par exemple, a le répertoire commun/lib. Vous voulez probablement mettre votre JAR là.

1

Si vous distribuez des guerres, vous devrez placer le pot iText à l'intérieur de la guerre.
Si vous distribuez des épis, vous pouvez placer tous les pots communs à plusieurs guerres à l'intérieur de la racine de l'oreille.
Si jar est commun à de nombreuses oreilles, il existe une option pour le placer dans le répertoire de la bibliothèque du serveur Web. Cette dernière option n'est pas recommandable à mon avis, car vous pourriez utiliser différentes versions de jar dans chaque oreille, produisant ainsi des conflits, et placer jar dans la racine du serveur n'est généralement pas un mécanisme de distribution standard. Enfin, je recommande d'utiliser Maven ou un outil similaire pour gérer vos dépendances et automatiser vos constructions Cela peut être d'une grande aide lorsque les dépendances commencent à augmenter en nombre.

Questions connexes