티스토리 뷰
Maven을 이용한 실행 가능한 jar 파일을 만드는 방법입니다.
pom.xml 파일에 아래 플러그인을 추가 후
프로젝트의 루트 디렉토리에서 maven package 를 실행하면 됩니다.
$mvn package
* pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> ... <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-shade-plugin</artifactId> <version>2.4.3</version> <executions> <execution> <phase>package</phase> <goals> <goal>shade</goal> </goals> <configuration> <!-- XML schema namespaces 오류 수정을 위해 필요함 --> <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> <!-- 실행 가능한 jar 파일을 만들기 위해서는 main method가 존재하는 클래스를 명시해 주어야 함 --> <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer"> <manifestEntries> <Main-Class>com.test.MainProcess</Main-Class> </manifestEntries> </transformer> </transformers> <!-- Dependency Reduced Pom 파일 미생성 --> <createDependencyReducedPom>false</createDependencyReducedPom> </configuration> </execution> </executions> </plugin> </plugins> </build> </project>
* Jar 파일 실행 방법
$java -jar filname.jar
maven-shade-plugin은 package의 모든 파일들을
하나의 jar파일로 묶어주는 플러그인 입니다.
실행 가능한 jar 파일을 만들기 위해서는
main method가 정의된 class의 위치를 명시적으로 기입해 주어야 합니다.
또한, 프로젝트에서 스프링 라이브러리를 사용하는 경우
XML schema namespaces 관련 오류가 발생할 수 있습니다.
스프링 라이브러리의 META-INF/spring.handlers, META-INF/spring.schemas 파일이
덮어 씌어져서 발생하는 오류로
org.apache.maven.plugins.shade.resource.AppendingTransformer 설정을 통해 해결할 수 있습니다.
이 옵션은 파일명이 중복되는 리소스가 여러개 있을 경우
파일을 덮어 씌우지 않고,
파일의 내용을 이어 붙여주도록 하는 기능을 제공합니다.
마지막으로 createDependencyReducedPom 옵션은
dependency-reduced-pom.xml 파일의 생성 여부를 설정합니다.
이 파일은 jar 생성 시 제외된 의존성 정보에 대한
내용을 기록하고 있습니다.
불필요하다면 false로 설정해주면 됩니다. Default True 입니다.
'개발 > Java' 카테고리의 다른 글
java.lang.NoClassDefFoundError: javax/servlet/SessionCookieConfig (0) | 2016.03.08 |
---|---|
디자인 패턴 - Observer Pattern (0) | 2016.03.07 |
Maven 테스트 스킵 후 패키징 하기 (0) | 2016.03.03 |
1의 개수가 하나 이상인지 여부를 체크하는 비트연산 (0) | 2016.02.22 |
이전에 진행한 작업에 대한 복구 로직 구현 (0) | 2016.02.12 |