maven dependency scope
maven의 dependency에는 scope란 속성을 정의하는 부분이 있는데, 어떤 것들이 있는지 잠깐 살펴보겠습니다.
총 6가지의 scope를 지정할 수 있으며, 각각의 설명은 아래와 같습니다.
compile
기본 스코프로, 명시하지 않을 경우 사용됩니다.
컴파일 종속성은 프로젝트의 모든 클래스 경로에서 사용할 수 있습니다.
또한 이러한 종속성은 종속 프로젝트에도 전파됩니다.
1 | <dependency> |
provided
컴파일과 비슷하지만 JDK 또는 컨테이너가 런타임에 종속성을 제공할 것으로 예상한다는 것을 나타냅니다.
예를 들어 자바 엔터프라이즈 에디션(Java Enterprise Edition)용 웹 애플리케이션을 빌드할 때
서블릿 API와 관련 자바 EE API에 대한 종속성을 ‘provided’ 범위로 설정하는데,
이는 웹 컨테이너가 해당 클래스를 제공하기 때문입니다.
이 스코프의 종속성은 컴파일 및 테스트에 사용되는 클래스 경로에는 추가되지만,
런타임 클래스 경로에는 추가되지 않습니다. 그리고 transitive하지 않습니다.
1 | <dependency> |
runtime
의존성이 컴파일에는 필요하지 않지만, 실행에는 필요하다는 것을 나타냅니다.
메이븐은 이 스코프의 종속성을 런타임 및 테스트 클래스 경로에는 포함시키지만,
컴파일 클래스 경로에는 포함시키지 않습니다.
1 | <dependency> |
test
의존성이 애플리케이션의 일반적인 사용에는 필요하지 않으며,
테스트 컴파일 및 실행 단계에서만 사용 가능하다는 것을 나타냅니다.
일반적으로 이 scope는 JUnit이나 Mockito와 같은 테스트 라이브러리에 사용됩니다.
또한 단위 테스트(src/test/java)에서는 사용되지만
모델 코드(src/main/java)에서는 사용되지 않는 Apache Commons IO와 같은 비테스트 라이브러리에도 사용됩니다.
1 | <dependency> |
system
provided와 유사하지만 직접 포함해야 하는 JAR을 명시적으로 제공해야 합니다.
아티팩트는 항상 사용 가능하며 저장소에서 검색되지 않습니다.
1 | <dependency> |
import (maven 2.0.9 이후 버전에서만 사용가능)
이 스코프는 섹션의 pom 유형 의존성에서만 지원됩니다.
이 스코프는 지정된 pom 섹션의 효과적인 의존성 목록으로 대체되어야 함을 나타냅니다.
대체되기 때문에 가져오기 스코프의 의존성은 실제로 의존성의 전이성을 제한하는 데 참여하지 않습니다.
1 | <dependency> |
#java, #maven, #system, #import, #runtime, #test, #dependency, #scope