maven 으로 jar 를 생성하여 배포할때 종속적인(dependency) 라이브라리들이 실행시 필요합니다.
war 프로젝트는 WEB-INF 라는 폴더아래로 필요한것들을 넣어주지만 jar에서는 일일히 dependency로 추가된
라이브러리들을 처리하는것이 무척 귀찮고 막막합니다.
하나씩 잡아줘보지만 한두개도 아니고....
이럴땐 2가지 방법이 있습니다.
첫번째는 dependency를 따로 폴더안으로 모두 복사해오고 META-INF/MENIFEST.MF를 수정하는 것입니다.
아래와 같이 플러그인을 추가하고 goal로 install을 실행하면 모든 dependency 들이 lib안으로 복사하여 모으고 jar파일생성시 META-INF/MENIFEST.MF를 수정합니다.
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-dependency-plugin</artifactId>
- <executions>
- <execution>
- <id>copy</id>
- <phase>install</phase>
- <goals>
- <goal>copy-dependencies</goal>
- </goals>
- <configuration>
- <outputDirectory>
- ${project.build.directory}/lib
- </outputDirectory>
- </configuration>
- </execution>
- </executions>
- </plugin>
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-jar-plugin</artifactId>
- <version>2.3.2</version>
- <configuration>
- <finalName>${jar.name}</finalName>
- <!-- jar 파일이 생성될 폴더 -->
- <outputDirectory>${deploy.target.dir}</outputDirectory>
- <archive>
- <manifest>
- <!-- public static void main() 함수가 있는 클래스 지정 -->
- <mainClass>oasyss.Main</mainClass>
- <!-- jar 파일 META-INF/MANIFEST.MF 에 클래스패스 정보 추가 -->
- <addClasspath>true</addClasspath>
- <!--
- 클래스패스에 추가시 prefix 설정
- ex) log4j-1.2.16.jar -> lib/log4j-1.2.16.jar 로 추가됨
- -->
- <classpathPrefix>lib/</classpathPrefix>
- </manifest>
- </archive>
- </configuration>
- </plugin>
두번째방법은 jar 안에 모든 dependency를 포함시키는 것입니다. jar하나로 모든 라이브러리들이 포함되어 실행이 되는 구조입니다. 당연히 파일크기가 커지겠지요.
- <project>
- <build>
- <plugins>
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-assembly-plugin</artifactId>
- <version>2.2.1</version>
- <configuration>
- <descriptorRefs>
- <descriptorRef>jar-with-dependencies</descriptorRef>
- </descriptorRefs>
- </configuration>
- </plugin>
- </plugins>
- </build>
- </project>
그리고
maven assembly:assembly 라고 콘솔에서 실행하면
abc-0.0.1-SNAPSHOT.jar
abc-0.0.1-SNAPSHOT-jar-with-dependencies.jar
위와 같이 라이브러리가 포함된 jar와 일반 jar 가 생성된것이 보입니다.
참조
http://entireboy.egloos.com/4615383
http://redrebel.tistory.com/entry/maven-으로-생성한-jar-파일이-실행이-안될때-NullPointerException