구동에 필요한 의존성 라이브러리를 모두 (외부폴더로)포함해서 jar 를 생성하도록 해본다.
pom.xml 에서 jar 플러그인을 수정하고 dependency 플러그인을 추가하고 설정한다.
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<archive>
<manifest>
<mainClass>printTime.GetTime</mainClass>
<addClasspath>true</addClasspath>
<classpathPrefix>libs/</classpathPrefix>
</manifest>
</archive>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<version>2.5.1</version>
<executions>
<execution>
<id>copy-dependencies</id>
<phase>package</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<includeScope>runtime</includeScope>
<outputDirectory>${project.build.directory}/libs/</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>
libs 폴더를 추가하고 해당 폴더에 라이브러리들을 넣어 주도록 설정하였다.
jar 플러그인은 클래스패스 선언을 관리하여 MANIFEST.MF 에 넣어줄것이고, dependency 플러그인은 폴더를 생성하고 라이브러리들을 복사하여 줄것이다.
Maven build goals = package 를 진행해 보자.
생성된 jar 의 MANIFEST.MF 를 살펴보면 아래와 같다.
Manifest-Version: 1.0
Archiver-Version: Plexus Archiver
Built-By: macdev
Class-Path: libs/log4j-api-2.11.1.jar libs/log4j-core-2.11.1.jar
Created-By: Apache Maven 3.3.9
Build-Jdk: 1.8.0_77
Main-Class: printTime.GetTime
Class-Path 가 추가된것을 확인할 수 있다.
jar가 생성된 폴더에 libs 폴더도 생성되었고 libs 폴더 내부에 로그 라이브러리들도 들어 있다.
별도의 classpath 를 불러 올 필요가 없어졌다. 실행해 보도록 하자.
java -jar printTime-1.0.0.jar