반응형
의존성 전이
메이븐에서 디펜던시가 걸려있는 라이브러리들은 그 라이브러리와 의존관계가 있는 라이브러리를 모두 다운받는다.
예를 들어 pom.xml에 junit라이브러리를 명시하였을 때, junit 프로젝트의 pom.xml dependency에 기술된 모든 라이브러리를 같이 다운받게된다. (junit에 필요한 라이브러리들을 같이 받아온다.)
메이븐은 의존성 전이에 대한 설정 변경을 지원한다.
- 의존성 중개(dependency mediation)
- 버전이 다른 두 개의 라이브러리가 의존 관계에 있다면 메이븐은 더 가까운 의존 관계에 있는 pom 설정 버전과 의존 관계를 가진다.
- A->B->C->D 2.0 버전, A->E->D 1.0 버전의 의존관계가 있을 경우, A프로젝트는 D 1.0 버전과 의존 관계를 가진다. (2.0을 사용하고 싶을 경우, 명확하게 의존 관계를 명시해야 한다.)
- 의존성 관리(dependency management)
- 메이븐 설정파일인 <dependencyManagement/>엘리먼트에 의존 관계에 있는 라이브러리와 버전을 명시적으로 정의한다.
- 앞의 예에서 A 프로젝트에서 D라이브러리의 2.0버전을 사용한다고 <dependencyManagement/>에 설정할 수 있다.
- 의존성 스코프(dependency scope)
- 현재 빌드 상태에 맞는 라이브러리인 경우 의존 관계를 갖는다. (<scope/> 참고)
- 의존성 예외(excluded dependencies)
- 의존 관계에 있는 라이브러리를 <exclusion/> 엘리먼트를 활용하여 명시적으로 제외시킬 수 있다.
- 선택적 의존성(optional dependencies)
- A->B->C와 같은 구조로 의존 관계를 가지는 경우 B 프로젝트에 C가 optional로 설정되어 있다면, A 프로젝트를 빌드 할 때 C는 의존 관계를 가지지 않도록 설정하는 기능이다. <optional/> 엘리먼트를 활용하여 설정할 수 있다.
의존성 전이 기능 때문에 의도하지 않은 라이브러리와 의존 관계를 갖는 경우가 발생하는데, 이 같은 문제는 위의 다섯 가지 기능을 활용하여 프로젝트에 제외할 수 있다.
현재 프로젝트와 의존 관계에 있는 라이브러리 구조를 파악할 수 있도록 dependency 플러그인은 tree 골을 제공한다.
mvn dependency:tree
반응형
'프로그래밍 노트 > 빌드도구' 카테고리의 다른 글
[Maven] 메이븐 프로파일_1 (0) | 2019.05.02 |
---|---|
[Maven] 메이븐 속성(properties, pom/project, settings ...) (0) | 2019.03.31 |
[Maven] 메이븐 의존 라이브러리 적용 스코프 (0) | 2019.03.31 |
[Maven] 메이븐 의존 라이브러리 관리 (0) | 2019.03.31 |
[Maven] 메이븐 저장소 (0) | 2019.03.31 |