web-dev-qa-db-fra.com

violation de contrainte du chargeur

J'ai rencontré le problème d'avoir le même .jar (pour mon cas, el-api.jar v2.1) deux fois pour un projet, d'où la pile d'erreurs suivante lorsque j'essaie d'exécuter mon projet à l'aide de Tomcat 6.

WARNING: Unexpected error forwarding to login page
javax.servlet.ServletException: Java.lang.LinkageError: loader constraint violation: when resolving interface method "javax.servlet.jsp.JspApplicationContext.getExpressionFactory()Ljavax/el/ExpressionFactory;" the class loader (instance of org/Apache/jasper/servlet/JasperLoader) of the current class, org/Apache/jsp/login_jsp, and the class loader (instance of org/Apache/catalina/loader/StandardClassLoader) for resolved class, javax/servlet/jsp/JspApplicationContext, have different Class objects for the type javax/el/ExpressionFactory used in the signature

 at Java.lang.Thread.run(Thread.Java:619)
Caused by: Java.lang.LinkageError: loader constraint violation: when resolving interface method "javax.servlet.jsp.JspApplicationContext.getExpressionFactory()Ljavax/el/ExpressionFactory;" the class loader (instance of org/Apache/jasper/servlet/JasperLoader) of the current class, org/Apache/jsp/login_jsp, and the class loader (instance of org/Apache/catalina/loader/StandardClassLoader) for resolved class, javax/servlet/jsp/JspApplicationContext, have different Class objects for the type javax/el/ExpressionFactory used in the signature

J'ai trouvé le http://blog.springsource.com/2008/10/20/understanding-the-osgi-uses-directive/

mais ce n'est pas utile car la solution affecte trop de parties de mon projet.

Je ne peux pas apporter de modifications au Tomcat, car le projet sera utilisé par de nombreux autres utilisateurs.

Le travail actuel consiste à supprimer manuellement le fichier el-api.jar chaque fois que nous effectuons une génération ET utilise Tomcat6. Ensuite, nous devons remettre le .jar comme cela est demandé pour d'autres choses.

Je suis utilisé Maven 2 et Maven 3 pour construire. (btw, quelqu'un connaissait-il l'utilisation de Maven3 sur Jruby?)

Quelqu'un peut-il m'aider avec le problème?

20
user454043

J'ai rencontré le problème d'avoir le même .jar (pour mon cas, el-api.jar v2.1) deux fois pour un projet, d'où la pile d'erreurs suivante lorsque j'essaie d'exécuter mon projet à l'aide de Tomcat 6.

Ensuite, marquez l'artefact el-api.jar comme provided, s'il l'est.

Le travail actuel consiste à supprimer manuellement le fichier el-api.jar chaque fois que nous effectuons une génération ET utilise Tomcat6. Ensuite, nous devons remettre le .jar comme cela est demandé pour d'autres choses.

Une bien meilleure façon de gérer cela serait de déclarer la dépendance à l'intérieur des profils et de la marquer comme provided (par exemple dans un profil "Tomcat6") ou non en fonction des besoins.

17
Pascal Thivent

J'ai eu cette erreur en essayant d'exécuter le mvc-ajax Spring (3.0.5) avec Tomcat 7.

Tomcat 7 utilise el-api 2.2 et jsp-api 2.2. Le fichier pom mvc-ajax spécifie jsp-api 2.1, qui contient également les classes dans el-api.

Pour le faire fonctionner, j'ai commenté jsp-api 2.1 du pom. Cela a permis à Tomcat d'utiliser sa propre version (la plus récente).

6
Jim Sime