Нарушение ограничения загрузчика
Я столкнулся с проблемой того, что один и тот же .jar(для моего случая, el-api.jar v2.1) дважды для одного проекта, следовательно, следующий стек ошибок, когда я пытаюсь запустить мой проект с помощью 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
Я нашел
http://blog.springsource.com/2008/10/20/understanding-the-osgi-uses-directive/
но это не полезно, поскольку решение влияет на слишком много частей моего проекта.
Я не могу вносить какие-либо изменения в Tomcat, а также проект будет использоваться многими другими пользователями.
Текущая работа заключается в том, чтобы manuelly удалить el-api.jar каждый раз, когда мы делаем build и использует Tomcat6. Затем нам нужно поместить .jar обратно, поскольку это требуется для других вещей.
Я использую Maven 2 и Maven 3 для сборки. (Кстати, кто-нибудь знал об использовании Maven3 на Jruby?)
Может ли кто-нибудь помочь мне в этом вопросе?
Ответы
Ответ 1
Я столкнулся с проблемой того, что один и тот же .jar(для моего случая, el-api.jar v2.1) дважды для одного проекта, следовательно, следующий стек ошибок, когда я пытаюсь запустить мой проект с помощью Tomcat 6.
Затем отметьте артефакт el-api.jar как provided
, если он есть.
Текущая работа заключается в том, чтобы manuelly удалить el-api.jar каждый раз, когда мы делаем build и использует Tomcat6. Затем нам нужно поместить .jar обратно, поскольку это требуется для других вещей.
Гораздо лучший способ справиться с этим - объявить зависимость внутри профилей и пометить ее как provided
(например, в профиле "tomcat6" ) или не в зависимости от потребностей.
Ответ 2
Я получил эту ошибку, пытаясь запустить образец Spring (3.0.5) mvc-ajax с Tomcat 7.
Tomcat 7 использует el-api 2.2 и jsp-api 2.2. Файл pm mvc-ajax указывает jsp-api 2.1, который также содержит классы в el-api.
Чтобы выполнить это, я прокомментировал jsp-api 2.1 из pom. Это позволило Tomcat использовать собственную (более новую) версию.