[Web] Maven plugin

Maven 이란?

Maven은 자바용 프로젝트 관리도구로, pom.xml에 필요한 라이브러리를 작성만 해주면 프로젝트에서 필요한 여러 라이브러리를 네트워크를 통해 자동으로 다운받아 준다. (개발자가 수기로 라이브러리를 다운해서 설치할 필요가 없다)

pom.xml 구조

https://wikidocs.net/18340 <- 링크에 너무나도 잘 설명되어 있다.

plugin 종류

maven plugin 종류들에 대해 알아보고, 어떤 역할을 하는지 정리해봅시다.

  • maven-jar-plugin

maven-jar-plugin

Builds a Java Archive (JAR) file from the compiled project classes and resources.

maven-jar-plugin은 실행 가능한 jar파일을 만들어준다.

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-jar-plugin</artifactId>
    <configuration>
        <archive>
            <index>true</index>
            <manifest>
                <mainClass>메인 클래스</mainClass>
            </manifest>
        </archive>
    </configuration>
</plugin>
태그 설명
<mainClass> 메인 클래스를 지정한다.
<addClasspath> 클래스 패스(Class-Path 값)을 추가할지 여부를 지정한다. dependencies에 작성된 jar파일들이 classpath로 추가된다.
<addExtensions> 확장 정보가 포함된다. 이것은 <dependencies>에 작성된 라이브러리 정보 를 내보내는 위한 것이다.
<packageName> Jar 패키지(Package)을 출력한다.

참고 자료

Apache Maven 공식 홈페이지 Maven 정의 및 예제

maven-assembly-plugin

package 할 시, 의존 라이브러리들을 jar 파일에 포함해서 저장하기 위해 maven-assembly-plugin을 사용한다.

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-assembly-plugin</artifactId>
    <version>3.1.0</version>
    <configuration>
        <descriptorRefs>
            <descriptorRef>jar-with-dependencies</descriptorRef>
        </descriptorRefs>
    </configuration>
    <executions>
        <execution>
            <phase>package</phase>
            <goals>
                <goal>single</goal>
            </goals>
        </execution>
    </executions>
</plugin>

maven-shade-plugin

자바 어플리케이션의 모든 패키지와, 그에 의존관계에 있는 패키지 라이브러리까지 모두 하나의 jar로 패키징 해준다.

배포시에 필요한 라이브러리들을 exclude/include할 수 있고, jar파일을 minimize 함으로서 보다 가벼운 jar파일을 생성할 수 있다.

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-shade-plugin</artifactId>
            <version>2.4.3</version>
            <configuration>
              <transformers>
                  <transformer
                      implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                      <mainClass>MainClass</mainClass>
                  </transformer>
                  <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>
                  <transformer
                    implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
                      <resource>META-INF/cxf/bus-extensions.txt</resource>
                  </transformer>
                  <transformer
                    implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer">
                  </transformer>
              </transformers>                 
            </configuration>
            <executions>
                <execution>
                    <phase>package</phase>
                    <goals>
                        <goal>shade</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>
  • ManifestResourceTransformer
    • 자바의 MANIFEST 파일의 entries를 세팅해준다.
    • 실행 가능한 jar 파일을 생성할 시에 자바 어플리케이션을 구동할 MainClass를 지정해야 하는데, 이게 MANIFEST 파일의 entry 중 하나다.
  • AppendingTransformer
    • 스프링으로 구성된 어플리케이션은 context.xml에 namespace를 핸들링 해주는 Handler 클래스들이 정의되어 있는 spring.handlers 파일과, xml 설정 파일의 스키마가 정의되어 있는 spring.schemas 파일이 필요하다.
    • AppendingTransformer 설정을 사용해서, 이렇게 동일한 이름을 가진 파일들을 merge 처럼 하나의 파일로 만들어 준다.

참고

http://asuraiv.blogspot.com/2016/01/maven-shade-plugin-1-resource.html

태그: ,

업데이트:

댓글남기기