Dependency(의존성) 범위는 의존성의 transitive(전이)를 제한하고 다양한 빌드 작업에 사용되는 classpath에 영향을주기 위해 사용됩니다.
Maven에서 의존성을 선언하는 방법은 대략적으로 아래와 같습니다.
pom.xml
1 | <project> |
의존성에는 총 6가지의 scope가 존재합니다.
compile- 지정되지 않은 경우 사용되는 기본
scope입니다. Compile로 선언된 dependencies는 프로젝트의 모든classpath에서 사용할 수 있습니다. 또한 이러한 의존성은 종속 프로젝트로 전파됩니다.
- 지정되지 않은 경우 사용되는 기본
providedCompile과 비슷하지만 프로잭트 실행 시 라이브러리에 대한 의존성을 JDK 또는 container(ex.tomcat) 가 제공 할 것으로 예상함을 나타냅니다.- 예를 들자면, Java Enterprise Edition 용 web Applicaton 을 빌드할 경우 web container 가 Servlet API 및 관련 Java EE API 에 대한 class 및 의존성을 제공하므로
provided로 설정합니다. - 이 scope는 compile 및 test 시에만 사용되며 전이되지 않습니다.
runtimecompile에는 필요하지 않지만 실행 시 필요할 경우 사용합니다.runtime이 선언된 의존성은runtime과testclasspath 에 존재하지만compileclasspath 에는 존재하지 않습니다.
test- application 을 정상적으로 사용하는데는 필요하지 않지만 test 컴파일 또는 실행 시 필요함을 의미합니다.
- 이
scope는 전이되지 않습니다.
system- 이
scope는 명시 적으로 포함하는 JAR 을 제공해야한다는 점을 제외하고,provided와 유사합니다. - artifact 는 항상 사용 가능하며 repository 에서는 검색되지 않습니다.
- 이
import<dependencyManagement> 영역내부 pom 타입의 의존성 에만 지원됩니다.- 다른 프로젝트에서 관리되는 의존성 목록을 가져오기 위해서 사용합니다.
import scope로 선언된 POM 의 의존성 목록은 실제로 의존성의 전이에 참여하지 않습니다.