Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

의존 관계의 한 dependency(=artifact)가 여러 버전이 있는 경우 Maven은 어떻게 버전을 선택할까요? 다음은 X를 의존하는 여러 개의 모듈이 있습니다. 이 경우 Maven은 depth를 고려하여 depth가 깊지 않은 것을 먼저 선택하므로 X 1.0을 선택합니다.

draw.io Diagram
borderfalse
diagramName가까운 dependency 선택 (Gliffy)
simpleViewerfalse
width
linksauto
tbstyletop
diagramDisplayName
lboxtrue
diagramWidth991
revision2


다음은 depth가 동일한 경우입니다. 이 경우는 먼저 선언한 것을 선택하므로 X 2.0을 선택하게 됩니다.

draw.io Diagram
borderfalse
diagramName앞선 dependency 선택 (Gliffy)
simpleViewerfalse
width
linksauto
tbstyletop
diagramDisplayName
lboxtrue
diagramWidth774
revision1

책갈피
dependency-management
dependency-management
Dependency Management

...

동일 dependency를 사용하지만 Sub Module간의 버전이 다르다면? 다음의 도식을 살펴보겠습니다.

draw.io Diagram
borderfalse
diagramNameSub Module의 서로 다른 dependency (Gliffy)
simpleViewerfalse
width
linksauto
tbstyletop
diagramDisplayName
lboxtrue
diagramWidth771
revision1

A와 B Sub Module의 X dependency 버전이 다른 것을 확인할 수 있습니다. 만약에 Sub Module에서 X의 버전을 하나로 통일하고자 한다면 Super POM에 다음과 같이 추가합니다.

...

규모가 큰 프로젝트는 여러 모듈로 쪼개져 있습니다(예; Spring Boot). 통상적으로 문제가 안되지만 Spring Boot를 dependency로 하는 다른 외부 dependency를 추가하다보면 Spring Boot의 버전이 다를 수 있습니다.

draw.io Diagram
borderfalse
diagramNameBOM 적용 (Gliffy)
simpleViewerfalse
width
linksauto
tbstyletop
diagramDisplayName
lboxtrue
diagramWidth891
revision1

상기와 같은 경우 Spring Boot의 POM을 import하여 버전을 일괄 적용할 수 있습니다. 상기와 같은 구조를 가진 프로젝트에서는 Super POM에 다음과 같이 추가하면 됩니다.

...