problème de déploiement de Tomcat en utilisant le fichier jar à la place des classes

StackOverflow https://stackoverflow.com/questions/1091460

  •  11-09-2019
  •  | 
  •  

Question

Nous déployons un fichier WAR dans Tomcat 5.5 et il fonctionne très bien si les classes WEB-INF \ contient les fichiers .classes, mais si l'on déplace le fichier .jar contenant ce .classes dans WEB-INF \ lib, on obtient un exception à l'exécution se plaignant que java.lang.NoSuchMethodError, mais le fichier de classe existant dans le fichier .jar contient la classe et la méthode ne sort!

Toute aide sur ce serait apprécié.

Était-ce utile?

La solution

Cela pourrait être due à un conflit de classe. Assurez-vous qu'il n'y a pas une version plus ancienne de la classe quelque part (le dossier partagé de Tomcat, WEB-INF / classes, WEB-INF / lib). Si tel est le cas, vous savez peut pratiquement pas quelle classe Tomcat chargera. Si elle choisit un sans la méthode, l'exception que vous rencontrez aura lieu.

Autres conseils

Puisque vous obtenez un NoSuchMethodError, et non un ClassNotFoundError, cela signifie que vous avez une ancienne version de la classe quelque part (en dehors du fichier jar). Vous devez trouver et supprimer.

Cette classe est defently closin s'il vous plaît jeter un oeil ici http: //tomcat.apache.org/tomcat-5.5-doc/class-loader-howto.html#Class%20Loader%20Definitions

comme vous pouvez le voir il y a une priorité plus élevée pour les classes sous WEB-INF / classes comparant WEB-INF / lib. Vous avez les deux classes avec le même nom (et package). Lorsque l'un d'eux est dans les classes dossier qu'il a la priorité. quand ils sont à la fois dans le dossier lib, puis le second se premier (pots ont une priorité en fonction de leur ordre alpha-bétique)

Cela peut expliquer votre situation.

it helps  - Yonatan

Du point de vue d'une application Web, le chargement de classe ou d'une ressource regarde dans les dépôts suivants, dans cet ordre:

Cours de Bootstrap de votre machine virtuelle Java
Classes Classe de système de chargeur (décrits ci-dessus)
/ WEB-INF / classes de votre application web
/WEB-INF/lib/*.jar de votre application web
classes de chargement de classe commune (décrite ci-dessus)

Les endroits les plus recherchés par « chargeur de classes ordinaires » sont définis par la propriété dans common.loader $ CATALINA_BASE / conf / catalina.properties. C'est là nous activons / définir l'emplacement de l'action;
shared.loader = $ {} catalina.base / shared / classes $ {catalina.base} / shared / lib / *. jar

Et l'ordre ci-dessus donne un aperçu plus pour la question que vous face.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top