...
도움말 | ||
---|---|---|
| ||
Maven을 좀 안다고 자랑하려면 Maven Dependency Management에 대한 깊은 이해 및 문제해결 능력을 갖추고 있어야 합니다. 특히 dependency의 충돌 문제는 Maven을 사용하는 개발자들에게 정말 쉽지 않은 문제이므로 많이 사용하면서 충돌 문제를 해결하는 능력을 키우는 것이 중요합니다. |
Dependency의 속성 및 정의
Maven POM에 dependency를 추가할 때 다음과 같은 형식으로 추가합니다.
...
속성 | 설명 | 필수 |
---|---|---|
Group ID | Java의 패키지와 같은 개념 Artifact의 그룹 | O |
Artifact ID | Artifact의 식별자 Artifact 유형이 여러 가지가 있지만 대표적으로 .jar .war .ear 등이 있음 Artifact는 소스코드와 JavaDoc이 같이 포함될 수 있음 | O |
Version | Artifact의 버전 정보 | O |
Type | Artifact의 유형 | X |
Scope | Artifact의 적용 범위 (test, runtime, compile, provided, import, system 등 다양한 범위가 있음)
| X |
Classifier | Artifact에 여러 개의 식별자를 두고 싶을 때 사용 | X |
System Path | Scope가 system인 경우 <systemPath> 를 추가해야 함 | X |
새로운 Dependency 추가하기
Central Repository에서 Dependency 검색하기
Maven POM에 Dependency 추가하기
경우 <systemPath> 를 추가해야 함 | X |
새로운 Dependency 추가하기
Central Maven Repository에서 Dependency 검색하기
Central Maven Repository의 https://mvnrepository.com 입니다. 다음과 같이 접속을 하면 검색 화면을 확인할 수 있습니다.
검색창에 spring 으로 입력하면 spring과 관련된 dependency가 검색됩니다. 아래에서 spring-core를 추가하고자 하는 경우 spring-core를 클릭합니다.
그러면 다음과 같이 spring-core의 버전 목록이 나타납니다. 5.2.5.RELEASE를 클릭합니다.
Maven POM에 Dependency 추가하기
이제 해당 버전을 클릭하면 다음과 같이 XML의 내용을 확인할 수 있습니다.
이제 이 XML의 내용을 Maven POM(pom.xml
)파일에 추가합니다.
코드 블럭 | ||||
---|---|---|---|---|
| ||||
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>5.2.5.RELEASE</version>
</dependency> |
Local Repository에는 어떻게 저장되나?
...
이 방법은 아주 간단합니다. JAR 파일의 패키지명을 변경하는 것입니다. Maven Shade Plugin을 사용하면 JAR 파일 내부의 패키지명을 변경할 수 있습니다. 예를 들면 com.demo
패키지의 클래스가 충돌이 발생하는 경우 이 패키지를 shade.com.demo
로 변경하여 아예 충돌이 발생하지 않도록 하는 방법입니다. 보통 이 단계까지 진행이 되면 가장 안좋은 상황으로 인지하면 되겠습니다.
참고
- Dependency Mediation(의존성 중재)를 통해 여러 가지 버전의 의존성 버전을 사용하는 경우 해결하는 방법을 알아봅니다.
- Dependency Management(의존성 관리)를 통해 Sub Module 들이 여러 버전의 동일 dependency를 사용하는 경우 일괄 동일 버전으로 적용하는 방법을 알아봅니다.