사설은 머 간단히 하고 이클립스에서 Spring을 얹어서 Tomcat으로 띄우는데 Tomcat 콘솔에 아래와 같은 오류가 찍혔습니다.
정 보: validateJarFile(D:\Project\STS\.metadata\.plugins\org.eclipse.wst.server.core\tmp1\wtpwebapps\Example\WEB-INF\lib\com.springsource.javax.servlet-2.5.0.jar) - jar not loaded. See Servlet Spec 2.3, section 9.7.2. Offending class: javax/servlet/Servlet.class
이 문제는 javax.servlet.Servlet.class가 중복으로 로드되어서 발생한 문제입니다. <TOMCAT_HOMT>\lib 폴더 안에 servlet-api.jar안에 javax.servlet.Servlet.class가 있는데 프로젝트의 lib에도 javax.servlet.Servlet.class가 있어서 발생한 문제이므로 프로젝트의 WEB-INF/lib에 있는 javax.servlet-2.5.0.jar를 삭제해 주어야 합니다.
의존성 라이브러리 관리를 위해서 Maven을 사용하고 있었는데 SpringSource Enterprise Bundle Repository에서 Spring Framework 전체를 한번에 끌어오고 있었기 때문에 아래와 같이 exclusions을 사용해서 javax.servlet을 제거했습니다.
<dependency>
<groupId>org.springframework</groupId>
<artifactId>org.springframework.spring-library</artifactId>
<type>libd</type>
<version>${spring.version}</version>
<exclusions>
<exclusion>
<groupId>javax.servlet</groupId>
<artifactId>com.springsource.javax.servlet</artifactId>
</exclusion>
</exclusions>
</dependency>
이렇게 프로젝트의 라이브러리에서 javax.servlet을 제거하고 Tomcat을 실행하면 앞의 나오던 오류메시지가 없어진 것을 볼 수 있습니다.
질문있습니다
pom파일에서 서블릿 자르 파일을 삭제하게 되면 메이븐 골 실행시 컴파일 에러가 발생하지 않나요
만야 자바 소스중 서블릿 관련 클래스를 참조하게 된다면 빌드시 오류가 발생할 것 같아서 질문드렸습니다
혹 이런 경우에는 어떻게 해야 할까요?
이클립스 톰켓을 사용하지 않아야 할까요?
그런경우라면 메이븐에서 해당 부분을 provided 스코프로 설정하면 될것 같습니다.
좋은 정보 감사합니다.