빈쿵바라기
좌충우돌 개발자의 기록
빈쿵바라기
전체 방문자
오늘
어제
  • 분류 전체보기 (53)
    • Programming (25)
      • JAVA (12)
      • Spring Boot (6)
      • JPA (7)
      • Python (0)
    • Database (12)
      • RDBMS (4)
      • NoSQL (7)
    • Server (11)
    • Elasticsearch (3)
    • ETC (2)

블로그 메뉴

    공지사항

    인기 글

    최근 댓글

    최근 글

    티스토리

    hELLO · Designed By 정상우.
    빈쿵바라기

    좌충우돌 개발자의 기록

    Programming/Spring Boot

    [Maven] 라이브러리 Dependency 충돌 해결하기(Maven Tree)

    2023. 3. 2. 18:38

    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
      'Programming/Spring Boot' 카테고리의 다른 글
      • Spring AOP를 활용한 모든 Request에 Log 남기기
      • [Jasypt] Spring Boot 애플리케이션의 프로퍼티 암호화
      • [Mybatis] PostgreSQL ilike 구현하기(feat. Criteria 커스텀하기)
      • [Spring Security] 두개의 로그인 페이지(Multiple Login Pages)
      빈쿵바라기
      빈쿵바라기
      삽질하는 개발자의 좌충우돌 개발기

      티스토리툴바