Maven2에서는 dependency를 가지는 대상에 대해서 다음과 같이 scope를 지정하고 있습니다.
* compile
- 기본영역으로 아무것도 지정되지 않은 경우 사용
- compile 의존관계에 있는 것은 프로젝트의 모든 클래스에서 사용 가능
- 이와 같은 의존관계는 의존관계에 있는 프로젝트에 포함
* provided
- 실행 시 의존관계를 제공하는 JDK나 컨테이너에 대해서 적용
- 예를 들어, JEE에 대한 웹 애플리케이션을 만드는 경우, 웹 컨테이너가 서블릿 API와 Java EE API 관련 클래스들을 제공하기 때문에 provided 영역으로 의존관계가 세팅되어야 함
- 이 영역은 컴파일과 테스트의 클래스 패스 용으로 사용되며, 자동 영역임
* runtime
- 의존관계가 컴파일 시 필요하지 않지만, 실행 시 필요함을 의미
- 실행 시와 테스트 클래스 패스에 속하지만, 컴파일 클래스 패스에는 속하지 않음
* test
- 일반적인 애플리케이션 사용에 대해서는 의존관계가 필요 없고, 테스트 컴파일과 실행 시점에만 사용
* system
- 명시적으로 해당 JAR를 포함하는 것이 제공되어야 한다는 것을 제외하고 provided와 유사
- artifact는 항상 사용 가능하며 레파지토리에서 검색하지 않음
* import (Maven 2.0.9 이후에서만 적용)
- <dependencyManagement>에서 pom의 의존관계에 대해서 사용
- 지정된 POM이 해당 POM의 <dependencyManagement> 영역에 있는 의존관계로 대체됨을 의미
- 이것들이 대체되기 때문에 import 영역의 의존관계들은 실질적으로 의존에 대한 제약에 대해 관여하지 않음
Maven2에서는 다음과 같이 POM.xml에 설정합니다.
<dependency>
<groupId>group-a</groupId>
<artifactId>artifact-b</artifactId>
<version>1.0</version>
<type>bar</type>
<scope>runtime</scope>
</dependency>
Maven1에는 이런 설정이 없지만 Maven2로의 변경이나, Maven2로 만들어진 POM을 사용하는 경우 다음과 같이 설정합니다.
<dependency>
<groupId>foo</groupId>
<artifactId>bar</artifactId>
<version>1.0</version>
<properties>
<scope>test</scope>
</properties>
</dependency>
자세한 내용은 maven 공식 페이지에서 확인할 수 있습니다.
http://maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.html