Maven 프로젝트 의존성 파일들 패키징하기
보통, mvn package를 하면, 해당 프로젝트의 의존성 라이브러리들은 그대로 둔채 패키징을 합니다. 그런데, 배포 할 때는 maven을 사용하지 않는 분들을 위해서 이 프로젝트가 의존하고 있는 다른 라이브러리들도 같이 배포해주는 것이 좋을 겁니다. 그럴 때 유요한 플러그인은 바로 maven-dependency-plugin 입니다.
maven-assembly-plugin이 이런 일을 해주는게 아닌지 싶어서 이것 저것 해봤는데, 이 플러그인은 컴파일된 class 파일들을 만들어서 의존하고 있는 클래스들까지 통째로 가지고 있는 jar 파일을 만들 때 사용하는 거더군요. 뭐 의존성 관리 안하고 한 방 파일로 마치 cglib-nodep 같은 걸 만들 때 사용하면 모를까. 의존성 라이브러리를 계속 버전업 하며 교체할 수 있는 형태로 제공하려면 이 플러그인 보단 maven-dependency-plugin을 사용해서 의존성 라이브러리를 별도의 폴더(보통 lib에 두죠)에 같이 배포해주는 것이 좋겠습니다.
방법은 간단합니다.
<build>
...
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<id>copy-dependencies</id>
<phase>package</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<outputDirectory>
${project.build.directory}/lib
</outputDirectory>
<overWriteReleases>false</overWriteReleases>
<overWriteSnapshots>
false
</overWriteSnapshots>
<overWriteIfNewer>true</overWriteIfNewer>
</configuration>
</execution>
</executions>
</plugin>
...
</build>
...
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<id>copy-dependencies</id>
<phase>package</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<outputDirectory>
${project.build.directory}/lib
</outputDirectory>
<overWriteReleases>false</overWriteReleases>
<overWriteSnapshots>
false
</overWriteSnapshots>
<overWriteIfNewer>true</overWriteIfNewer>
</configuration>
</execution>
</executions>
</plugin>
...
</build>
이런식으로 pom.xml의 <build> 안에 <plugins> 안에 넣어주면, target 폴더 아래 lib 폴더를 만들고 그 안에 의존성 라이브러리들을 쫘르륵~ 복사해 줍니다.