[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
처럼 하나의 파일로 만들어 준다.
- 스프링으로 구성된 어플리케이션은 context.xml에 namespace를 핸들링 해주는 Handler 클래스들이 정의되어 있는
참고
http://asuraiv.blogspot.com/2016/01/maven-shade-plugin-1-resource.html
댓글남기기