'maven-shade-plugin'에 해당되는 글 1건

  1. 2011.03.03 Dependency Jar를 모아 하나로 모아주기 - maven-shade-plugin

mvn의 assembly 와 비슷한 기능을 가진 플러그인이 있다.
Spring Batch를 하면서 알게 된 건데..
maven-shade-plugin이다. mvn assembly는 파일명이 예쁘지가 않는다..
그러나 maven shade plugin을 활용하면 파일명도 예쁘게 나온다. 더 정확하게 말하면, 파일을 overwrite하기 때문이다.
maven-shade-plugin은 아래와 같이 버전명과 예쁘게 나옵니다.

[INFO] Replacing original artifact with shaded artifact.
[INFO] Replacing E:\sts\springbatch-mssql\target\springbatch-mssql-0.2.jar with
E:\sts\springbatch-mssql\target\springbatch-mssql-0.2-shaded.jar


하지만 제일 중요한 것은 스프링 프로젝트의 경우에는 스프링 설정파일인 applicationContext.xml의 namespace를 찾지 못해서 에러가 발생되는 경우가 종종 발생되기도 한다. 즉 spring lib 안의 dependecy 파일이 동일한 위치에 있다 그래서 META-INF안에 있는 spring.handlers와 spring.schemas 파일을 덮어버리는 일이 있다. 그래서, assembly 을 사용하면 문제가 되어서, 스프링 프로젝트에서는 maven-shade-plugin을 사용하고 있다.

 pom.xml 파일의 내용입니다.






<plugin>
     <groupId>org.apache.maven.plugins</groupId>
     <artifactId>maven-shade-plugin</artifactId>
     <version>1.4</version>
     <executions>
       <execution>
       <phase>package</phase>
         <goals>
           <goal>shade</goal>
           </goals>
           <configuration>
             <transformers>
               <transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
                 <resource>META-INF/spring.handlers</resource>
              </transformer>
             <transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
               <resource>META-INF/spring.schemas</resource>
             </transformer>
           </transformers>
         </configuration>
       </execution>
     </executions>
   </plugin>

Spring Batch는 transformer를 추가하고 AppendingTransformer를 사용하는데. 이 이유는 spring 관련 jar를 합치면서 overwrite되지 않고 계속 더해질 수 있도록 한 것이다.
xml에서 선언하는 namespace를 못찾는 것을 방지할 수 있도록 하기 위한 것이다..

* 주석 : Spring Batch Sample 소스에 좋은 것이 많다~


Posted by 김용환 '김용환'