참고글



메이븐 의존설정 제외하기. exclusions 태그 용도 및 기능
메이븐의 가장 큰 장점으로 라이브러리 의존 해결 기능입니다. 예를 들어 spring-context 라이브러리가 필요하다면 pom.xml에 다음과 같이 <dependency> 를 정의해주기만 하면 됩니다. 
     <dependency>
           <groupId>org.springframework</groupId>
           <artifactId>spring-context</artifactId>
           <version>4.1.0.RELEASE</version>
     </dependency>
cs

그런데 여기서 중요한 점은 spring-context를 개발할때 사용한 라이브러리가 있다는 것입니다. 예를 들어 logging 관련 프레임워크인 commons-logging이 그 예인데, 이 경우 메이븐이 spring-context의 <dependency>를 참고하여 자동으로 commons-logging까지 내려받게 됩니다.




<exclusions> 용도 및 사용법
<exclusions>는 뜻 그대로 특정 의존 라이브러리를 제외시키는 기능을 합니다.

앞선 예를 기준으로 설명해보자면 spring-context-4.1.0.jar이 commons-logging-1.0.0.jar를 의존한다고 했을때 spring-context-4.1.0을 dependency 설정으로 등록했을때 자동으로 commons-logging-1.0.0.jar를 내려받아 빌드환경에 추가됩니다.

이때 여기서 두가지 문제가 있을 수 있습니다.
첫번째로 spring-context-4.1.0.jar을 사용하지만 commons-logging은 2.0.0을 사용하고 싶은 경우입니다.
두번째로 spring-context를 사용하지만 로깅 프레임웍을 commons-logging(log4j)가 아닌 logback(slf4j)을 사용하고 싶은 경우입니다.

이경우 명시적으로 <exclusions>를 통해  commons-logging-1.0.0이 추가되지 않도록 할 수 있습니다. <exclusions>는 다음과 같은 형식으로 사용합니다.
     <dependency>
           <groupId>org.springframework</groupId>
           <artifactId>spring-context</artifactId>
           <version>4.1.0.RELEASE</version>
           <exclusions>
                <exclusion>
                     <groupId>commons-logging</groupId>
                     <artifactId>commons-logging</artifactId>
                </exclusion>
           </exclusions>
     </dependency>
cs


그러나 이대로 테스트를 수행하거나 빌드를 하는경우 당연히 실패할것입니다. 의존하는 logging 라이브러리가 없기 때문이지요. 따라서 exclusions를 사용한 경우 그 빈자리를 채워줄 dependency를 추가로 정의해주어야 합니다.




의존 라이브러리 모두 제외시키기
추가적으로 a.jar를 의존설정에 추가하지만 a.jar가 참조하는 모든 라이브러리를 자동으로 내려받지 않도록 하기 위해서는 아래와 같이 사용할 수 있습니다. 예를 들어 spring-context가 commons-logging 이외에도 여러가지 라이브러리를 의존하고 있을 수 있는데 그 모든것을 명시적으로 제외시켜주는것입니다. 
     <dependency>
           <groupId>org.springframework</groupId>
           <artifactId>spring-context</artifactId>
           <version>4.1.0.RELEASE</version>
           <exclusions>
                <exclusion>
                     <groupId>*</groupId>
                     <artifactId>*</artifactId>
                </exclusion>
           </exclusions>
     </dependency>
cs


단 spring-context가 참조하는 모든 라이브러리를 직접 dependency로 추가해주거나 클래스패스를 설정하고 해당 패스에 직접 라이브러리를 등록해주어야 합니다.

블로그 이미지

도로락

IT, 프로그래밍, 컴퓨터 활용 정보 등을 위한 블로그

댓글을 달아 주세요! 질문 환영합니다!