본문 바로가기

개발환경/이클립스

eclipse에서 Junit4 실행시 클래스 변경이 즉시 반영되지 않는 이유

"이클립스내에서 정확한 테스트를 하려면 반드시 메이븐 빌드된 모든 결과물을 삭제(클린)해야만 한다"

정확한 이유는 알수가 없었다.
그러나 추측컨데 다음과 같은 테스트를 통해 나만의 결론에 도달했다.

기본실행환경
OS : MS Windows Vista Home Edition
Eclipse : 3.3.2 WTP
Maven 2.0.9

현상 : 아무리 클래스를 변경하고 강제로 fail 하도록 코딩해도 정상적이다. 그러나 특정 시점에는 아무리 오류를 수정해도 계속 에러가 난다. 미친다~~~. 그런데 메이븐으로 빌드하고 나면 변경된 내용이 반영된다. 허참..

추정 : 이클립스가 컴파일하지 않는다.
결과 : 이클립스가 제대로 컴파일하는지 알기 위해 기본 컴파일 경로를 변경해봤으며 컴파일된 내용을 확인해 봤다. 정상적으로 컴파일한다.

추정 : 메이븐을 빌드하면 반영되므로 클래스를 참조하는게 아니라 레파지토리의 jar를 참조한다.
결과 : 메이븐으로 클린하게 되면 정상적으로 반영된다. 그러므로 레파지토리를 참조하는것은 아니다.

최종 결과 : 메이븐으로 빌드를 하게 되면 패키징 jar, 클래스(classes, test-classes)등이 생긴다. 이클립스의 경로를 classes가 아닌 eclipse-classes로 변경하면 ClassNotFoundException이 발생했다. 종합헤보면 이크립스가 프로젝트에서 클래스를 로딩할 수 있는 모든 자원을 클래스패스에 두는 듯 하다. 그러므로 내가 아무리 변경해도 무엇이 로딩된는지 알수 없을 것이다.

즉, 이클립스내에서 정확한 테스트를 하려면 반드시 메이븐 빌드된 모든 결과물을 삭제(클린)해야만 한다는 것이다.