반응형
위와 같이 Log4j 어노테이션이 감빵에 가면서(빨간 줄) org.apache.log4j.Logger cannot be resolved to a type 이런 메세지가 뜬다면 당장 pom.xml 파일을 열어보자.
바로 저 빨간 네모 박스에 있는 runtime 놈이 범인이니 해당 코드를 주석처리해주면 말끔히 해결할 수 있다.
주석처리 후 저장해주면 이렇게 출소한 Log4j 어노테이션을 만날 수 있다.
왜 이런 에러가 날까? 개발자 답게 한 번 찾아봤다.
dependency는 각각의 scope를 가진다. scope의 종류는 아래와 같다.
- compile : 기본 영역이며 컴파일 시점에 필요하고 배포할 때도 포함된다.
- provided : 컴파일 시점에 필요하지만 배포 시점에는 불필요한 라이브러리로 JDK, Servlet API, Java EE API 등이 해당된다.
- runtime : 컴파일 시점에는 필요 없지만 runtime 시점에 필요한 라이브러리이다.
- system : Repository에서 검색을 하지 않고 명시된 위치에서 Jar를 이용한다.
- test : 테스트 컴파일과 실행 시점에만 사용된다.
- import : Maven 2.0.9 이후에서만 적용된다. 다른 POM 설정 파일에 정의되어 있는 의존 관계 설정을 현재 프로젝트로 가져온다. <dependencyManagement>에서만 사용이 가능하다.
위의 괴랄한 종류들만 보고 절대 모르겠어서 runtime 전인 1번과 2번을 넣어보고 실행을 해봤다.
일단 provided와 compile로 변경했을 때는 에러가 전혀 발생하지 않는다. runtime을 주석 처리하면 에러가 해결되는 것이 compile이 아마 기본 영역이니 주석처리하면 자동으로 compile로 적용되어서 그런 것 같다.
끝!
반응형