0%

maven dependency scope, provided, system, import, runtime, test

maven

maven dependency scope

maven의 dependency에는 scope란 속성을 정의하는 부분이 있는데, 어떤 것들이 있는지 잠깐 살펴보겠습니다.
총 6가지의 scope를 지정할 수 있으며, 각각의 설명은 아래와 같습니다.

compile

기본 스코프로, 명시하지 않을 경우 사용됩니다.
컴파일 종속성은 프로젝트의 모든 클래스 경로에서 사용할 수 있습니다.
또한 이러한 종속성은 종속 프로젝트에도 전파됩니다.

1
2
3
4
5
<dependency>
<groupId>devscb</groupId>
<artifactId>devscb-lib</artifactId>
<version>1.0.0</version>
</dependency>

provided

컴파일과 비슷하지만 JDK 또는 컨테이너가 런타임에 종속성을 제공할 것으로 예상한다는 것을 나타냅니다.
예를 들어 자바 엔터프라이즈 에디션(Java Enterprise Edition)용 웹 애플리케이션을 빌드할 때
서블릿 API와 관련 자바 EE API에 대한 종속성을 ‘provided’ 범위로 설정하는데,
이는 웹 컨테이너가 해당 클래스를 제공하기 때문입니다.
이 스코프의 종속성은 컴파일 및 테스트에 사용되는 클래스 경로에는 추가되지만,
런타임 클래스 경로에는 추가되지 않습니다. 그리고 transitive하지 않습니다.

1
2
3
4
5
6
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
<scope>provided</scope>
</dependency>

runtime

의존성이 컴파일에는 필요하지 않지만, 실행에는 필요하다는 것을 나타냅니다.
메이븐은 이 스코프의 종속성을 런타임 및 테스트 클래스 경로에는 포함시키지만,
컴파일 클래스 경로에는 포함시키지 않습니다.

1
2
3
4
5
6
<dependency>
<groupId>devscb</groupId>
<artifactId>devscb-lib</artifactId>
<version>1.0.0</version>
<scope>runtime</scope>
</dependency>

test

의존성이 애플리케이션의 일반적인 사용에는 필요하지 않으며,
테스트 컴파일 및 실행 단계에서만 사용 가능하다는 것을 나타냅니다.
일반적으로 이 scope는 JUnit이나 Mockito와 같은 테스트 라이브러리에 사용됩니다.
또한 단위 테스트(src/test/java)에서는 사용되지만
모델 코드(src/main/java)에서는 사용되지 않는 Apache Commons IO와 같은 비테스트 라이브러리에도 사용됩니다.

1
2
3
4
5
6
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>

system

provided와 유사하지만 직접 포함해야 하는 JAR을 명시적으로 제공해야 합니다.
아티팩트는 항상 사용 가능하며 저장소에서 검색되지 않습니다.

1
2
3
4
5
6
7
<dependency>
<groupId>devscb</groupId>
<artifactId>devscb-lib</artifactId>
<version>1.0.0</version>
<scope>system</scope>
<systemPath>${project.basedir}/lib/devscb-lib.jar</systemPath>
</dependency>

import (maven 2.0.9 이후 버전에서만 사용가능)

이 스코프는 섹션의 pom 유형 의존성에서만 지원됩니다.
이 스코프는 지정된 pom 섹션의 효과적인 의존성 목록으로 대체되어야 함을 나타냅니다.
대체되기 때문에 가져오기 스코프의 의존성은 실제로 의존성의 전이성을 제한하는 데 참여하지 않습니다.

1
2
3
4
5
6
7
<dependency>
<groupId>devscb</groupId>
<artifactId>devscb-lib-project</artifactId>
<version>1.0.0</version>
<type>pom</type>
<scope>import</scope>
</dependency>

#java, #maven, #system, #import, #runtime, #test, #dependency, #scope