본문 바로가기
자바,스프링 - Java,Spring Framework

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

by devscb 2024. 11. 12.
반응형

maven dependency scope

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

compile

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

<dependency>
    <groupId>devscb</groupId>
    <artifactId>devscb-lib</artifactId>
    <version>1.0.0</version>
</dependency>

provided

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

<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>servlet-api</artifactId>
    <version>2.5</version>
 <scope>provided</scope>
</dependency>

runtime

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

<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와 같은 비테스트 라이브러리에도 사용됩니다.

<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.12</version>
 <scope>test</scope>
</dependency>

system

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

<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 섹션의 효과적인 의존성 목록으로 대체되어야 함을 나타냅니다.
대체되기 때문에 가져오기 스코프의 의존성은 실제로 의존성의 전이성을 제한하는 데 참여하지 않습니다.

<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

728x90
반응형

댓글