1. 오류내용
어노테이션으로 Log4j를 사용할 때 다음과 같은 에러가 나타났다.
2. 원인
Maven Dependencies 의 해당 jar를 확인하니 비활성화 되어있었다.
3. 해결
해결법은 pom.xml에서 runtime를 주석처리 해주어 빌드시에도 동작할 수 있도록 한다.
<scope>runtime</scope>
: 런타임시점(프로젝트 실행 시점)시 해당 dependency를 사용한다.
확인!
Scope
Maven을 사용하면 POM(Project Objectr Model)파일을 통해 의존성(종속성)을 설정한다.
모든 종속성은 범위를 갖고 있으며, 이 범위는 종속성의 전이성을 제한하고, 다양한 빌드 작업에 사용되는 클래스 경로에 영향을 주기 위해 사용된다. 종류에는 compile, provided, runtime, test, system, import(Maven 2.0.9이후 버전) 가 있다.
compile:
- scope를 따로 지정한 범위가 없을 때 적용되는 기본 범위이다. 프로젝트의 모든 클래스에서 사용가능하다.
provided:
- compiler와 유사하지만, 다른 외부 컨테이너에서 제공되는 API인 경우 provided를 사용하여 마지막 패키징시 포함되지 않도록한다.
- 웹애플리케이션 개발에서 tomcat은 servlet api를 제공하기 때문에 런타임시 maven의 servlet api 의 종속성을 provided로 지정하여 패키징시 제외시킨다.
runtime: 컴파일시 필요하지 않지만, 실행시 필요할때 사용한다. 테스트 클래스패스에는 포함되지만 컴파일 클래스패스에는 포함되지 않음.
test: 테스트 컴파일과 실행 시점에서만 사용한다.( JUnit , Mockito과 같은 테스트라이브러리에 사용됨)
system : provided와 유사하지만 JAR를 명시적으로 제공해야한다.
참고
https://maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.html