Maven 입문 | 그밖에 | package 시에 library 포함시키기
package를 실행 할 시에 war 프로젝트는 따로 명시를 해주지 않아도 WEB-INF/lib에 dependency 라이브러리 파일을 복사해서 포함을 시켜준다. 이에 반해 jar 프로젝트는 따로 명시를 해 주지 않으면 포함이 되지 않는다.
포함해서 package를 해야 하는 경우라면 아래와 같이 하면 된다.
특정 디렉터리에 dependency 라이브러리 파일들 복사하기
Maven Dependency Plugin에 dependency:copy-dependencies Goal을 실행해 주면 {프로젝트}/target/dependency 디렉터리에 dependency가 jar 라이브러리 파일을 복사해 준다.
mvn dependency:copy-dependencies
그런데 package에 포함이 되는 경우라면 매번 복사해 주는 일이 번거러울 수 있고, 특정 디렉터리에 복사를 하고 싶은 경우도 있다. package 명령을 실행 할 시에 자동으로 dependency 파일을 특정 디렉터리로 복사하도록 pom.xml에 명시 해 줄수도 있다.
<project>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<version>2.3</version>
<executions>
<execution>
<id>copy-dependencies</id>
<phase>package</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
</execution>
</executions>
<configuration>
<outputDirectory>../../${lib.dir}</outputDirectory>
<overWriteIfNewer>true</overWriteIfNewer>
</configuration>
</plugin>
</plugins>
</build>
</project>
패키지 파일에 dependency 라이브러리 파일들 포함하기
생성하는 package에 dependency 파일을 모두 포함해서 1개의 package 파일을 생성하는 방법도 있다. 이 방법은 필요한 의존성 파일이 모든 포함이 되어 있기 때문에 별도의 classpath 설정 없이 패키지 파일 1개만 있어도 실행이 가능하다.
먼저, pom.xml 파일에 Maven Assembly Plugin 을 추가한다.
<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>
그러고 assembly:assembly Goal을 실행시키면 target 경로에 jar 파일이 2개 생성된다. 하나는 dependency가 없는 파일이고, 하나는 dependency가 포함된 파일이다.
mvn assembly:assembly
파일으로 알수 있듯이 “-jar-with-dependencies"가 붙어 있는 파일이 dependency가 포함된 파일이다.
- xxx-1.0.0-SNAPSHOT.jar
- xxx-1.0.0-SNAPSHOT-jar-with-dependencies.jar