war 프로젝트의 경우에는 war 배포시 WEB-INF/lib 안에 dependency 하고 있는 jar 들이 배포된다.
그러나 jar 프로젝트의 경우에는 컴파일을 하기 위해서 dependency 하고 있는 라이브러리들을 사용할 뿐이지 배포물에는 포함되지 않는다.
1. maven 프로젝트에서 단일 jar 만들기
배포물(jar) 에 해당 라이브러리도 같이 넣고 싶다면 assembly 골을 사용하면 된다.
2. maven 프로젝트에서 의존하고 있는 jar 추출하기
그러나 현재 프로젝트에서 사용하고 있는 dependency 라이브러리들에 대해서 다 추출하고 싶다면(실제로 파일로 가져오고 싶다면) dependency:copy-dependencies 명령을 이용해서 가져올 수 잇다.
그러나 jar 프로젝트의 경우에는 컴파일을 하기 위해서 dependency 하고 있는 라이브러리들을 사용할 뿐이지 배포물에는 포함되지 않는다.
1. maven 프로젝트에서 단일 jar 만들기
배포물(jar) 에 해당 라이브러리도 같이 넣고 싶다면 assembly 골을 사용하면 된다.
이 골은 의존하고 있는 프로젝트의 파일들을 전부 풀어서 하나의 jar 로 만들어버린다. 따라서 많은 수의 라이브러리를 하나의 jar 로 만들고 싶은 경우 사용할 수 있다.$emds-core> mvn assembly:assembly
단, 이것을 실행하기 위해선 pom.xml 의 build/plugins 하위에 다음과 같은 설정을 추가해야한다.
만약, 단일 jar 파일을 실행 jar 로 만들 경우엔 manifest 설정도 추가한다
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
<archive>
<manifest>
<mainClass>Main</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
2. maven 프로젝트에서 의존하고 있는 jar 추출하기
그러나 현재 프로젝트에서 사용하고 있는 dependency 라이브러리들에 대해서 다 추출하고 싶다면(실제로 파일로 가져오고 싶다면) dependency:copy-dependencies 명령을 이용해서 가져올 수 잇다.
$emds-core> mvn dependency:copy-dependencies
이 명령은 프로젝트에서 참조하는 라이브러리들을 target/dependency 에 모두 복사해넣는다.
따라서 소스를 풀어서 재결합한 assembly 방식을 피하고 싶다면 이 명령과
package 명령을 통해 만들어진 프로젝트.jar 파일을 사용한다면 해당 프로젝트를 완전히 배포할 수 있다.