org.apache.struts2.dispatcher.FilterDispatcher cannot be cast to javax.servlet.Filter
개발 이야기/이클립스 |
2010. 4. 1. 11:15
maven 기반의 프로젝트는 dependency한 라이브러리 관리나 테스팅하기에는 정말 좋은 것 같습니다.하지만 m2Eclipse 버그때문인지는 잘 모르겠지만 pom.xml은 직접 타이핑하는 것이 속편할 듯.
이번에 포스팅하는 org.apache.struts2.dispatcher.FilterDispatcher cannot be cast to javax.servlet.Filter 라는 메시지는 내가 m2Eclipse를 가지고 WTP 프로젝트를 설정할 때마다 만났던 오류이기도 한데. 이전에 진행했던 프로젝트 pom.xml을 가져와서 할 때도 간혹 생기는터라 개발환경에 따라 다양한 원인이 있는 것 같습니다.
그렇다고 운에맡길 수도 없는 노릇. 일단 이 오류가 발생하는 일반적인 이유는 pom.xml에 정의된 servlet-api 가 maven을 통해 배포시 포함되어 생기는 tomcat의 servlet-api 충돌문제라서 pom.xml에 정의되어 있는 servlet-api부분을 다음과 같이 수정하면 됩니다.
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
<scope>test</scope>
</dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
<scope>test</scope>
</dependency>
즉 scope 속성이 빠져 있거나 provided 로 되어 있는 경우에 주로 발생하게 되는 오류라 할 수 있습니다. 그런데 전자의 경우는 그럭저럭 이해가 가지만 후자의 경우인 provided은 컴파일시에는 참조를 하되 배포시에는 제외하도록 하는 것이라 결과적으로는 같은 것 같은데도 위와 동일한 에러를 발생시키는 것을 보면 잘 이해가 가지 않는 부분이기도 합니다. 의미상으로야 차이는 있겠지만....-_-a
물론 scope가 빠져있거나 provided로 되어 있어도 정상적으로 동작하는 경우가 있습니다.(운이 좋다면...) 머 이 경우에는 그냥 쓰시면 될 것 같고 앞으로는 속편하게 scope를 test 로 포함하면 될 일이다.
'개발 이야기 > 이클립스' 카테고리의 다른 글
이클립스 에러 : org.eclipse.wst.server.ui.internal.provisional.UIDecoratorManager (0) | 2010.04.16 |
---|---|
[Eclipse PlugIn ] Properties Editor (0) | 2009.09.21 |
JUnit 사용시 static import 자동완성하기 (0) | 2009.09.10 |
이클립스로 서버구동시 Timeout 제한으로 구동되지 않을 때 (0) | 2009.09.07 |
이클립스에서 Javadoc 생성시 Charset을 UTF-8로 설정하기 (0) | 2009.08.14 |