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 소스에 좋은 것이 많다~


'Web service' 카테고리의 다른 글

Facebook 기술  (0) 2011.03.16
FTP command 사용하기  (0) 2011.03.03
tomcat 6.0.31 패치 눈에 띄는것  (0) 2011.03.02
tomcat 6.0.32 중요 패치 내용  (0) 2011.03.02
tomcat 6.0.30 중요 패치 내용  (0) 2011.03.02
Posted by '김용환'
,