10:39:38.121 [Thread-7hread] WARN org.springframework.core.type.classreading.AnnotationAttributesReadingVisitor - Failed to classload type while reading annotation metadata. This is a non-fatal error, but certain annotation metadata may be unavailable.
java.lang.ClassNotFoundException: org.junit.Before
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1676)
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1521)
at org.springframework.core.type.classreading.RecursiveAnnotationAttributesVisitor.visitEnd(AnnotationAttributesReadingVisitor.java:167)
...
위와 같은 오류메시지가 출력된다. 이유는 정확히 모르겠지만 테스트 코드쪽의 JUnit 어노테이션들의 클래스를 로딩못해서 발생하는 오류로 보였다. 그래서 검색하다가 핫스왑에 사용할 대상폴더를 rebel.xml에서 설정할 수 있다는 것을 알게 되었다.
<?xml version="1.0" encoding="UTF-8"?>
<application xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.zeroturnaround.com" xsi:schemaLocation="http://www.zeroturnaround.com http://www.zeroturnaround.com/alderaan/rebel-2_0.xsd">
<classpath>
<dir name="/home/outsider/projects/example/target/classes">
</dir>
<dir name="/home/outsider/projects/example/target/test-classes">
</dir>
</classpath>
<web>
<link target="/">
<dir name="/home/outsider/projects/example/target/m2e-wtp/web-resources">
</dir>
</link>
<link target="/">
<dir name="/home/outsider/projects/example/src/main/webapp">
</dir>
</link>
</web>
</application>
JRebel을 써본 사람은 알겠지만 rebel.xml은 메뉴를 통해서 프로젝트에 생성하기 때문에 사실 한번도 저 파일을 열어본적이 없다. JRebel을 버전업한 것 외에는 초기부터 rebel.xml을 건드린 적은 없는것 같은데(프로젝트를 재생성하면서 새로 추가했는지도...) 갑자기 왜 테스트 클래스쪽에서 오류가 발생하는지는 모르겠지만 <dir name="/home/outsider/projects/example/target/test-classes"> 부분을 제거하면 더이상 기존의 오류가 발생하지 않는다. 원하는 클래스가 핫스왑이 되지 않거나 불필요한 오류가 나오면 rebel.xml을 수정하면 되겠다.
혹시나 하는 생각에 한 가지 여쭙고자 글 남깁니다.
class, xml 파일 저장 시 정상적으로 WAS에 반영이 되는 반면에 jsp는 WAS에 반영이 되지 않는 현상이 있습니다.
아무래도 JRebel 설정 시
Publishing > Never publish automatically 로 하기 때문인 것 같은데..
해결 할 수 있는 방법이 있을런지요?
전 JSP를 안쓰고 프리마커를 쓰고 있는데 말씀하신 문제는 없었는데요.
http://zeroturnaround.com/forum/topic.php?id=1623
요 링크의 내용이 도움이 되시지 않을까 합니다.
아...감사합니다.
지금 집이라서 확인은 못해봤지만 알려주신 링크의 정보대로 설정을 추가하면 잘 될 것 같다는 느낌이 팍~~드네요..
감사합니다. ^^
저도 자꾸 뜨는 에러 메시지가 거슬려서 좀 찾아봤었는데요, 관련 JRebel 이슈가 보고된게 있습니다. http://zeroturnaround.com/forum/topic.php?id=2377 다음 버전에 패치될 것으로 예상되네요.
스프링의 AnnotationConfigWebApplicationContext 로 애플리케이션을 띄울때 각 클래스의 annotation들을 확인하는데, classpath에 들어가서는 안되는 테스트 클래스들이 JRebel 때문에 포함되어서 발생한 문제로 보입니다.
아~ 자세한 내용 감사합니다. 등록된 버그가 있었군요...
그냥 갑자기 그러길래 좀 있으면 해결되겠지 했는데 영 해결안되서 수동으로 처리를 했네요 ㅎ