보통, 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>

이런식으로 pom.xml의 <build> 안에 <plugins> 안에 넣어주면, target 폴더 아래 lib 폴더를 만들고 그 안에 의존성 라이브러리들을 쫘르륵~ 복사해 줍니다.