2010-09-21 9 views
17

Encontré el problema de tener el mismo .jar (para mi caso, el-api.jar v2.1) dos veces para un proyecto, por lo tanto, la siguiente pila de errores cuando intento ejecutar mi proyecto usando Tomcat 6.violación de restricción de cargador

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 

he encontrado la http://blog.springsource.com/2008/10/20/understanding-the-osgi-uses-directive/

pero eso no es útil ya que los efectos de la solución demasiadas partes de mi proyecto.

No puedo hacer ningún cambio en el Tomcat y el proyecto será utilizado por muchos otros usuarios.

La solución actual es eliminar manuelly el-api.jar cada vez que hacemos una compilación Y utiliza Tomcat6. Entonces tenemos que volver a poner el .jar como se solicita para otras cosas.

Me utilizan Maven 2 y Maven 3 para construir. (Por cierto, ¿alguien sabe sobre el uso de Maven3 en Jruby?)

¿Alguien me puede ayudar con el problema?

+0

Disculpe la ambigüedad, para resolver el problema, creo que se necesita una forma de asegurarse de que Tomcat 6 obtenga una sola el-api.jar no las dos. La restricción será: - \t Ningún cambio en Tomcat 6 - \t Una larga - \t La solución se puede integrar de forma continua en la construcción – Javabeginner

Respuesta

15

Me encontré con el problema de tener el mismo .jar (para mi caso, el-api.jar v2.1) dos veces para un proyecto, por lo tanto, la siguiente pila de errores cuando intento ejecutar mi proyecto utilizando Tomcat 6.

Luego marque el artefacto el-api.jar como provided, si lo es.

La solución actual es eliminar manuelly el-api.jar cada vez que hacemos una construcción Y utiliza Tomcat6. Entonces tenemos que volver a poner el .jar como se solicita para otras cosas.

Una mejor manera de manejar esto sería declarar la dependencia dentro de los perfiles y para marcarlo como provided (por ejemplo, en un perfil "tomcat6") o no dependiendo de las necesidades.

+0

Gracias por la respuesta, pero que no iba a funcionar para nuestro caso, ya que al tener dos perfiles, necesitamos dos lanzamientos y solo quería uno. – Javabeginner

+0

@Javabeginner No veo cómo eliminar/agregar archivos manualmente es mejor ... ¿Qué estás buscando * exactamente *? ¿Cuáles son tus limitaciones? ¿Cuáles son sus requisitos? Agregar detalles generalmente ayuda a obtener respuestas que coincidan con ellos. –

+0

Disculpe la ambigüedad, para resolver el problema, creo que se necesita una forma de asegurarse de que Tomcat 6 obtenga una sola el-api.jar no las dos. La restricción será: - \t Ningún cambio en Tomcat 6 - \t Una larga - \t La solución se puede integrar de forma continua en la construcción – Javabeginner

6

Tengo este error al intentar ejecutar el resorte (3.0.5) muestra mvc-ajax con Tomcat 7.

Tomcat 7 utiliza el-api 2.2 y JSP-api 2.2. El archivo mvc-ajax pom especifica jsp-api 2.1, que también contiene las clases en el-api.

Para obtener este funcionamiento, comenté jsp-api 2.1 del pom. Esto permitió a Tomcat usar su propia versión (más reciente).

Cuestiones relacionadas