일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- HTML
- DBMS
- golang
- apache spark
- django
- Windows 10
- Big-Data
- 오버워치
- Python
- Notepad++
- maven
- GTK
- Cisco
- centos
- Linux
- IOT
- MVC
- OpenSOC
- VNC
- Apache Metron
- 리눅스
- db
- ThingPlug
- ubuntu
- 그래픽카드
- Docker
- gns3
- Today
- Total
¡Hola, Mondo!
Maven shade plugin 본문
uber-jar
mvn package
해당 프로젝트의 의존성 라이브러리들은 그대로 둔채 패키징한다.
프로젝트가 의존하고 있는 다른 라이브러리로 함께 패키징하려면, --> uber-jar 파일을 생성하려면, "maven-assembly-plugin" 나 "maven-shade-plugin" 를 사용해야 한다.
Maven assembly plugin
dependencies 로 참조한 모든 것을 포함(class 등)해서 패키징하는 방법이다.
<build>
<plugins>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<version>x.x.x</version>
<configuration>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
</plugin>
</plugins>
</build>
Maven shade plugin
패키징시에 dependency 옵션 중 scope의 값에 따라 해당 dependency를 패키징에 포함 할지 안할지를 결정할 수 있어 가벼운 jar 파일을 생성할 수 있다.
//패키지에 포함할 dependency
<dependency>
<groupId>com.xxxx.xxxxxxxx</groupId>
<artifactId>xxxx</artifactId>
<version>x.x.x</version>
<classifier>jar-with-dependencies</classifier><scope>compile</scope>
</dependency>
//패키지에 포함하지 않을 dependency
<dependency>
<groupId>com.xxxx.xxxxxxxx</groupId>
<artifactId>xxxx</artifactId>
<version>x.x.x</version>
<classifier>jar-with-dependencies</classifier><scope>provided</scope>
</dependency>
maven 명령시 goal을 'shade:shade'로 지정하여 실행할 수 있지만, <executions> 설정을 통해 package 에 shade를 바인딩하는 설정을 통해 'mvn package'로 구동할 수 있다.
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>2.4.3</version>
<configuration>
<!-- put your configurations here -->
</configuration>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
Resource Transformer
shade 플러그인을 사용할 때, Resource Transformer 설정을 하면
서로 다른 artifacts 들로부터 uber-jar 를 생성할때, classes 및 resources 파일들을 '중복없이' 패키징 할 수 있게 해준다.
각 Resources Transformer 설정의 종류 및 특징은 아래와 같다
ApacheLicenseResourceTransformer | Prevents license duplication |
ApacheNoticeResourceTransformer | Prepares merged NOTICE |
AppendingTransformer | Adds content to a resource |
ComponentsXmlResourceTransformer | Aggregates Plexus components.xml |
DontIncludeResourceTransformer | Prevents inclusion of matching resources |
IncludeResourceTransformer | Adds files from the project |
ManifestResourceTransformer | Sets entries in the MANIFEST |
PluginXmlResourceTransformer | Aggregates Mavens plugin.xml |
ServicesResourceTransformer | Relocated class names in META-INF/services resources and merges them. |
XmlAppendingTransformer | Adds XML content to an XML resource |
(1) ManifestResourcesTransformer
자바 'MANIFEST' 파일의 entries 를 세팅해 준다.실행 가능한 jar 파일을 생성할시에 자바 어플리케이션을 구동할 MainClass를 지정해야하는데, 이것은 'MANIFEST' 파일의 entry 중 하나이다.
다음과 같이 <configuration> 설정에 추가한다.
<configuration>
<transformers>
<transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
<mainClass>com.asuraiv.project.aaa.MainClass</mainClass>
</transformer>
</transformers>
</configuration>
실행 가능한 jar 파일을 생성할시에 자바 어플리케이션을 구동할 MainClass를 지정해야하는데, 이것은 'MANIFEST' 파일의 entry 중 하나이다. 위 예제처럼 <mainClass> 설정으로 해당 어플리케이션의 메인클래스를 입력한다.
(2) AppendingTransformer
<configuration> <transformers> <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer"> <mainClass>org.springframework.batch.core.launch.support.CommandLineJobRunner</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> </configuration
MANIFEST.MF이란?
Manifest 파일은 해당 자바 어플리케이션의 정보 즉, 일종의 메타정보(패키지 관련 정보 및 파일 확장 관련 정보)를 담고 있는 파일이다.
JAR 파일을 생성할 때 자동적으로 기본 manifest 파일이 생성된다.
하나의 아카이브 안에는 오직 하나의 manifest 파일이 존재하고 META-INF 디텍토리에 있어야 한다.
[참고]
http://asuraiv.blogspot.kr/2016/01/maven-shade-plugin-1-resource.html
http://stewie38.tistory.com/91
'Beji > Etc' 카테고리의 다른 글
비트코인 (0) | 2016.09.29 |
---|---|
IoT 플랫폼 (0) | 2016.09.05 |
[윈도우 10] "Windows 준비중 컴퓨터를 끄지 마십시오." (7) | 2016.08.22 |
C 코드 자동 정렬, HTML 자동 정렬 등 유용한 Notepad++ 플러그인 (0) | 2016.07.13 |
티스토리 소스코드 입력창 플러그인 : SyntaxHighlighter 3.0.83 사용법 (0) | 2016.05.30 |