J'ai une application (WAR) déployée sur Tomcat, contenant plusieurs fichiers jar. Pour des raisons, j'ai besoin de prolonger une classe à l'intérieur de l'un de ces fichiers jar et de substituer l'une de ses méthodes. La nouvelle méthode sera différente pour chaque client en fonction de leurs besoins.
Ce que j'ai fait est de créer un petit fichier jar qui dépend du jar principal, d'ajouter la classe qui étend celle d'origine, et de le compiler.
Maintenant, je veux le déployer sur Tomcat afin que la nouvelle classe soit chargée par Spring. Cela fonctionne bien si je mets le nouveau jar à l'intérieur de WEB-INF/lib du WAR déployé, mais cela ne fonctionne pas si je le mets à l'intérieur de shared/lib (ou simplement lib) de Tomcat. L'erreur est ClassNotFoundException pour celui que j'étends (en gros, chaque classe provenant du jar principal ne peut pas être trouvée). J'ai déjà vérifié catalina.properties et il charge correctement le .jar dans les deux emplacements.
Ma question est : pourquoi ce JAR ne fonctionne que si je le mets à l'intérieur des bibliothèques du WAR mais pas si je le mets à l'intérieur de la bibliothèque partagée de Tomcat ? La version de Tomcat est la 7.0.86
Un petit schéma pour donner une meilleure idée de ce qui fonctionne et de ce qui ne fonctionne pas :
- dossier tomcat
- lib
- jar-qui-étend-le-jar-principal.jar (ClassNotFoundException pour celui que j'étends)
- shared
- lib
- jar-qui-étend-le-jar-principal.jar (ClassNotFoundException pour celui que j'étends)
- webapps
- my-application
- WEB/INF
- lib
- jar-qui-étend-le-jar-principal.jar (cela fonctionne correctement et je peux utiliser ma classe personnalisée)