Джар конфликт в Maven и Tomcat? - PullRequest
2 голосов
/ 31 марта 2011

У меня проблемы с загрузкой банок.Я развернул веб-приложение Struts2 на Tomcat, и это привело к ошибке:

SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:....../Tomcat%206.0/lib/slf4j-log4j12-1.5.8.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:....../Tomcat%206.0/webapps/Timesheet/WEB-INF/lib/slf4j-log4j12-1.6.1.jar!/org/slf4j/impl/StaticLoggerBinder.class]
2011-03-31 14:33:48,302 DEBUG com.opensymphony.xwork2.config.providers.XmlConfigurationProvider.loadConfigurationFiles:748 - Loading action configurations from: struts-default.xml
2011-03-31 14:33:50,592 DEBUG com.opensymphony.xwork2.config.providers.XmlConfigurationProvider.loadConfigurationFiles:832 - Loaded action configuration from: struts-default.xml
...
2011-03-31 14:33:50,809 DEBUG com.opensymphony.xwork2.config.providers.XmlConfigurationProvider.register:202 - Loaded type:com.opensymphony.xwork2.util.XWorkConverter name:struts impl:com.opensymphony
.xwork2.util.AnnotationXWorkConverter
Mar 31, 2011 2:33:50 PM org.apache.catalina.core.StandardContext start
SEVERE: Error filterStart
Mar 31, 2011 2:33:50 PM org.apache.catalina.core.StandardContext start
SEVERE: Context [/Timesheet] startup failed due to previous errors

Я исключил все конфликты jar в pom.xml, но, похоже, это еще один файл slf4j-log4j в Tomcat lib.

Затем я попытался удалить файл slf4j-log4j12-1.5.8.jar в Tomcat / lib и снова запустить войну, но все равно получил еще одну ошибку:

Mar 31, 2011 2:44:51 PM org.apache.catalina.loader.WebappClassLoader validateJarFile
INFO: validateJarFile(...\Tomcat 6.0\webapps\Timesheet\WEB-INF\lib\servlet-api-2.4.jar) - jar not loaded. See Servlet Spec 2.3, section 9.7.2. Offending class:
javax/servlet/Servlet.class
... // Struts file still loaded here, but another Error filterStart: the same as above.

пропустить что-нибудь здесь?

РЕДАКТИРОВАТЬ: Я удалил избыточный сервлет-API, включенный в pom.xml: он случайно включен другим jar.Но после исключения этой банки я получил ошибку:

Mar 31, 2011 4:11:19 PM org.apache.catalina.loader.WebappClassLoader validateJarFile
INFO: validateJarFile(...\Tomcat 6.0\webapps\Timesheet\WEB-INF\lib\servlet-api-2.4.jar) - jar not loaded. See Servlet Spec 2.3, section 9.7.2. Offending class:
javax/servlet/Servlet.class
2011-03-31 16:11:20,234 DEBUG com.opensymphony.xwork2.config.providers.XmlConfigurationProvider.loadConfigurationFiles:748 - Loading action configurations from: struts-default.xml
2011-03-31 16:11:21,028 DEBUG com.opensymphony.xwork2.config.providers.XmlConfigurationProvider.loadConfigurationFiles:832 - Loaded action configuration from: struts-default.xml

Мой сервлет-API в моем Tomcat имеет версию 2.5;исключенный servlet-api.jar в pom.xml имеет версию 2.4.

Ответы [ 2 ]

7 голосов
/ 31 марта 2011

Я не думаю, что tomcat поставляется в комплекте с slf4j, поэтому удаление его из tomcat/lib является правильным шагом.

Тогда вам не нужно иметь servlet-api-x.jar в WEB-INF/lib, потому что он связан сКот.Пометьте его как <scope>provided</scope> в maven pom.

Чтобы убедиться, что все вычищено, позвоните mvn clean

2 голосов
/ 31 марта 2011

Кажется, что-то тянет в servlet-api-2.4.jar, который не должен быть развернут как часть веб-приложения.Если у вас есть servlet-api в качестве зависимости в вашем проекте, убедитесь, что он имеет область действия при условии .Это говорит Maven использовать его для компиляции, но не для упаковки.(см. этот раздел часто задаваемых вопросов Maven и Введение в механизм зависимостей ).

Однако сервлет-API также может быть загружен, потому что на него ссылаются транзитивно из одногозависимости вашего проекта.Если это так, попробуйте выполнить:

mvn зависимость: дерево

, чтобы распечатать список переходных зависимостей и откуда они берутся.В выходных данных ищите зависимость servlet-api с непредоставленной областью действия.Затем вы можете удалить нарушителя, добавив исключение к его зависимости от предка в вашем POM.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...