Maven scope & optional

배드웅·2023년 3월 21일
0

Optional

<optional>true</optional>

optional은 의존성을 선택적으로 사용하도록 허용하는 설정입니다.
즉, 프로젝트에 의존성을 추가하더라도 빌드 결과물에 포함되지 않을 수 있습니다.
이 설정은 프로젝트가 다른 모듈과 함께 사용될 때 해당 모듈에서 선택적으로 의존성을 사용하도록 허용할 때 유용합니다.

Scope

Maven에서 scope는 의존성(dependency)이 어느 단계에서 사용되는지를 설정하는 것으로, 프로젝트의 클래스패스(classpath)와 빌드 결과물에 포함될지 여부를 결정합니다.

Maven에서는 다음과 같은 scope들을 제공합니다.

- compile: 기본값으로, 의존성이 컴파일, 테스트, 런타임, 배포 등 모든 단계에서 사용됩니다.
- provided: 의존성이 컴파일 타임에는 필요하지만, 런타임에서는 제외되어야 하는 경우에 사용됩니다. 대표적으로, 서블릿 API나 JDBC 드라이버가 해당됩니다.
- runtime: 의존성이 런타임, 테스트 실행 등에서 사용되지만 컴파일 타임에는 필요하지 않은 경우에 사용됩니다. 대표적으로, JDBC 구현체나 로깅 라이브러리가 해당됩니다.
- test: 테스트 실행에서만 사용되는 경우에 사용됩니다.
- system: 로컬 시스템에 설치된 외부 JAR 파일 등을 사용할 때 사용됩니다. 이 경우 <systemPath> 요소로 경로를 지정해야 합니다.
- import: 외부 Maven 프로젝트의 의존성을 가져올 때 사용됩니다.

optional true / scope provided 차이

<scope>provided</scope>

빌드 도구에서 사용하는 의존성 범위(scope) 중 하나로, 프로젝트를 빌드할 때 컴파일 타임에 필요하지만 런타임에는 제외되는 의존성을 의미합니다.
예를 들어, 서블릿 API는 웹 애플리케이션을 개발할 때 컴파일 타임에는 필요하지만, 애플리케이션을 실행할 때는 서블릿 컨테이너에 의해 제공되므로 포함되지 않습니다.

<optional>true</optional>

의존성을 선택적으로 사용하도록 허용하는 설정입니다.
즉, 프로젝트에 의존성을 추가하더라도 빌드 결과물에 포함되지 않을 수 있습니다.
이 설정은 프로젝트가 다른 모듈과 함께 사용될 때 해당 모듈에서 선택적으로 의존성을 사용하도록 허용할 때 유용합니다.

<optional>true</optional>

optional은 의존성을 선택적으로 사용할 수 있도록 허용하는 반면,

<scope>provided</scope>

scope provided는 의존성이 컴파일 타임에 필요하지만 런타임에는 제외되도록 하는 것입니다.

참고

https://maven.apache.org/guides/introduction/introduction-to-optional-and-excludes-dependencies.html

profile
개발자

0개의 댓글