Maven은 라이브러리 관리에서 유용한 도구입니다. 그러나 때로는 각 라이브러리가 참조하는 하위 라이브러리 버전이 충돌하는 경우가 있습니다. Maven에서는 각 라이브러리가 서로 다른 버전을 참조하고 있을 때는 maven tree 구조에서 root와 가장 가까운 라이브러리를 선택하여 빌드가 됩니다.
Maven Tree 확인하기
Maven Tree를 사용하면 프로젝트에 필요한 다양한 라이브러리와 그들의 의존성 관계를 한눈에 파악할 수 있습니다.
mvn dependency:tree
예를 들어, tika 라이브러리와 openhtmltopdf 라이브러리는 모두 pdfbox라이브러리를 참조하지만 각각 버전이 다른 pdfbox를 참조합니다.
tika-parsers-standard-package -> pdfbox:2.0.27
openhtmltopdf-pdfbox -> pdfbox:2.0.22
Maven Tree에서 tika 라이브러리가 상단에 있기 때문에 pdfbox:2.0.27버전을 선택하고 openhtmltopdf 의 pdfbox는 생략됩니다. . 이와 같이 버전 충돌이 발생했을 때는 자신이 직접 선택하고 싶은 라이브러리와 버전을 지정할 수 있습니다. 이때 사용하는 것이 exclusion
태그입니다. exclusion
태그를 사용하면 해당 라이브러리의 의존성 관계에서 제외시킬 수 있으므로, 원하는 라이브러리와 버전을 직접 선택할 수 있습니다.
<exclusion>
<dependency>
<groupId>org.apache.tika</groupId>
<artifactId>tika-parsers-standard-package</artifactId>
<version>2.6.0</version>
<exclusions>
<exclusion>
<groupId>org.apache.pdfbox</groupId>
<artifactId>pdfbox</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>com.openhtmltopdf</groupId>
<artifactId>openhtmltopdf-pdfbox</artifactId>
<version>1.0.6</version>
</dependency>
위와 같이 tika 라이브러리 dependency안에 exclusion 태그로 pdfbox를 지정하면, tika 라이브러리의 pdfbox:2.0.27은 제외시키고 빌드하며 openhtmltopdf 라이브러리가 참조하고 있는 pdfbox:2.0.22를 사용하게 됩니다.
Conclusion
Maven Tree를 활용하면 프로젝트에 필요한 라이브러리와 그들의 의존성 관계를 파악할 수 있고, exclusion 태그를 활용하여 원하는 라이브러리와 버전을 직접 선택할 수 있습니다.
'Programming > Spring Boot' 카테고리의 다른 글
[Spring Security] 수동 인증(강제 로그인) (0) | 2023.05.16 |
---|---|
Spring AOP를 활용한 모든 Request에 Log 남기기 (0) | 2023.03.29 |
[Jasypt] Spring Boot 애플리케이션의 프로퍼티 암호화 (0) | 2023.03.24 |
[Mybatis] PostgreSQL ilike 구현하기(feat. Criteria 커스텀하기) (0) | 2022.08.20 |
[Spring Security] 두개의 로그인 페이지(Multiple Login Pages) (0) | 2022.08.10 |