2011-03-31 3 views
2

jar로드에 문제가 있습니다. 나는 톰캣에 Struts2 웹 응용 프로그램을 구축, 오류가 발생했습니다 :Maven과 Tomcat에서 jar 충돌이 발생합니까?

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 

가 나는 pom.xml의 모든 항아리-충돌을 제외한하지만 톰캣 lib 디렉토리에있는 다른 slf4j-log4j 파일이 될 것으로 보인다.

는 그럼 난 톰캣/lib 디렉토리에 SLF4J-log4j12-1.5.8.jar을 제거하고 다시 전쟁을 다시 실행하려고했으나 또 다른 오류가있어 :

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. 

내가 여기 아무것도 그리워 하는가를?

EDIT : pom.xml에 포함 된 중복 servlet-api를 제거했습니다. 실수로 다른 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 버전 2.5이있다; pom.xml의 제외 된 servlet-api.jar에는 버전 2.4가 있습니다.

답변

7

바람둥이에는 slf4j가 번들되어 있다고 생각하지 않으므로 tomcat/lib에서 제거하는 것이 적절한 단계입니다.

그런 다음 servlet-api-x.jarWEB-INF/lib에 넣지 않아야합니다. 파일명을 <scope>provided</scope>으로 표시하십시오.

전화 mvn clean

+0

나는 그것이 아마도 원인의 일부라고 생각하지만, 문제는 여전히 지속됩니다. 내 업데이트 된 질문을 검토해 주시겠습니까? –

+0

@ Hoàng Long mvn 깨끗한 오래된 항아리가 실제로 대상 – Bozho

+1

에 존재하지 않는지 확인합니다. pom.xml에서 servlet-api-2.4.jar를 제외하지 않아도 "mvn clean"이 내 문제를 해결합니다. 이상한. –

2

반드시 모든 청소 업되어 있는지 확인 뭔가가 웹 애플리케이션의 일부로서 배포 할 예정되지 않은 서블릿 API를-2.4.jar 당기는 것 같다합니다. 프로젝트에 종속물로 servlet-api가 있다면 의 범위가으로되어 있는지 확인하십시오. 이것은 컴파일을 위해 maven을 사용하지만 패키징을 위해서는 사용하지 않는다. (this Maven FAQ entryIntroduction to the Dependency Mechanism 참조).

그러나 servlet-api는 프로젝트 종속성 중 하나에서 일시적으로 참조되기 때문에 끌어 올 수 있습니다. 이 실행하려는 경우 인 경우 :

mvndependency:tree

는 이적 종속성과 그들이 어디에에서 오는의 목록을 인쇄합니다. 출력에서 제공되지 않은 범위로 servlet-api 종속성을 검색합니다. 그런 다음 POM의 조상 종속성에 제외를 추가하여 위반자를 제거 할 수 있습니다.

+0

@Bozho : 당신 말이 맞습니다.하지만 서블릿 -API를 제외하고 나면 문제는 계속 발생합니다. Tomcat이 항아리를 제공한다면 pom.xml에 포함시킬 필요가 없다고 생각합니다. 그게 맞습니까? –

+0

@ Hoàng Long : Maven에서 컴파일 할 때 여전히 servlet-api가 필요합니다. 그렇지 않으면 컴파일시 기본 Servlet/JSP 클래스 (HttpServlet, ServletRequest 등)를 참조하는 것이 없습니다. 그것은 여전히 ​​포함될 필요가 있지만, '제공된'범위가 있습니다. – prunge

+0

죄송하지만이 작업을 수행 할 방법을 찾을 수 없습니다. 전이 의존성으로 인해 jar 파일을 제공하는 동안 어떻게 jar 파일을 지정할 수 있습니까? –

관련 문제