Question

Version Tomcat: 5.0.28 JDK: 1.5.0.14

Le problème:

J'utilise les deux hiverne et entretoises Nous ne sommes pas sur le dernier et le plus grand de la version pour ces bibliothèques So- les deux ont besoin d'une autre version de la bibliothèque apache-commons.

La solution que je pense à:

Utilisez fichier manifest et spécifiez une autre version de apache-communes pour chaque

Mon application Web est déployée comme webapps \ myapp

Et la lib est webapps \ myapp \ WEB-INF \ lib

Je modifié le Manifest.mf dans hibernate3.jar comme suit

  

Manifest-Version: 1.0

     

Archiveur-Version: Plexus Archiveur   Créé par-: 1.5.0_15-b04 (Sun> Microsystems Inc.)   Class-Path: hibernatelib / slf4j-api-1.5.2.jar

et mettre le slf4j-api-1.5.2.jar dans webapps \ myapp \ WEB-INF \ lib \ hibernatelib

Maintenant, je me attends à ce que slf4j-api-1.5.2.jar serait chargé automatiquement avec mise en veille prolongée Mais sa ne fonctionne pas ... Tomcat est incapable de trouver les fichiers jar spécifiés dans le .mf comme ci-dessus

Question:

  1. Est-ce que je fais quelque chose de mal? ou est-il Tomcat?
  2. Y at-il une autre solution à ce problème?

Je l'ai déjà essayé \ contrôler les éléments suivants

  1. Vérifié pour les caractères de nouvelle ligne à la fin du fichier
  2. Si je mets slf4j-api-1.5.2.jar dans la principale lib dossier- l'erreur va loin- je sais si ce ne est pas en mesure de trouver ce fichier jar particulier
  3. Essayé relative, chemin absolu dans le fichier manifeste
Était-ce utile?

La solution

Le seul endroit où l'attribut Class-Path dans le manifeste est utilisé est lorsque le jar contenant le manifeste est appelé comme un pot exécutable à l'aide ( « de java -jar theFile.jar »).

Certains conteneurs de servlets semblent le soutenir, mais selon à cette liste de diffusion après (Désolé, couldn « t trouver quelque chose de plus authorative si rapidement), il n'est pas spécifié dans la spécification soit.

Pour autant que je le comprends, les applications Web se chargent généralement leurs classes à l'aide d'un seul chargeur de classe. « Correctement » la résolution de ce problème de dépendance, il faudrait au moins 2 différents classloaders.

Une solution de hack-ish peut-être utiliser Jarjar ou un outil similaire pour emballer les différentes bibliothèques ainsi que leurs dépendances respectives.

Vous voulez produire un jar contenant Hibernate avec sa bibliothèque apache-communes et un autre jar contenant des entretoises ainsi que sa bibliothèque apache-commons. serait déplacé chaque copie de la bibliothèque apache-commons à différents forfaits (éventuellement hibernate.org.apache.* et struts.org.apache.*) pour résoudre le problème avec les différentes versions de Classe.

Autres conseils

Avez-vous vérifié les autorisations sont correctes? Aussi peut-être une idée pour assurer qu'il ya un saut de ligne après la dernière ligne Class-Path, qui m'a aidé plus tôt aujourd'hui!


Mise à jour: si Tomcat ne prend pas en charge les déclarations de classpath comme ça, la seule chose qui vient à l'esprit perturber le fonctionnement avec classloaders. Personnellement, je ne ferais pas ça - il y a tout un monde de douleur potentielle dans cette voie et vous aurez probablement un temps plus facile de mise à niveau. Désolé, je ne peux pas penser à une meilleure réponse!

Avez-vous essayé la dernière, la plus grande version de Tomcat pour voir si le problème persiste? Tomcat 6 est déjà vieux de plusieurs années, et encore moins 5,5 ou 5,0 ...

Je ne crois pas que vous pouvez le faire. Tomcat ne regarde pas JAR manifeste décider des questions de CLASSPATH. Il utilise sa propre hiérarchie des chargeurs de classe pour trouver ce dont il a besoin, en utilisant ce qu'il dit Classpath.

Si vous voulez différentes versions d'un fichier JAR pour les différentes parties de votre application, vous ressemblez à une personne qui a vraiment besoin deux JSR concurrents là-bas, mais Je ne sais pas de toute mise en œuvre de la proposition de module Sun.

Le seul serveur d'applications que je connaisse qui vous permettra de le faire est serveur DM Printemps . Il est une fourchette de Tomcat qu'ils améliorer.

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