Jihoon's IT Development

Web Developer's Hobby Development Notes

Maven Dependency Scope의 종류

Dependency(의존성) 범위는 의존성의 transitive(전이)를 제한하고 다양한 빌드 작업에 사용되는 classpath에 영향을주기 위해 사용됩니다.

Maven에서 의존성을 선언하는 방법은 대략적으로 아래와 같습니다.

pom.xml

1
2
3
4
5
6
7
8
9
10
11
12
<project>
...
<dependencies>
<dependency>
<groupId>org.apache.maven</groupId>
<artifactId>foo-bar</artifactId>
<version>0.0.1-SNAPSHOT</version>
<scope>${scope}</scope>
</dependency>
</dependencies>
...
</project>

의존성에는 총 6가지의 scope가 존재합니다.

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

참고 : http://maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.html#Dependency_Scope