Maven で依存 JAR ライブラリを target/dependency にコピー

問題

$ mvn package

で、プロジェクトの target ディレクトリ直下に、プロジェクトの成果物として JAR ファイルが作成される。

このとき、例えばマニフェスト

Class-Path: ./dependency/foo.jar ./dependency/bar.jar

のように指定する。そして、JARをコマンドラインからクラスパスを指定することなく実行するために、依存する JAR ライブラリを target/dependency に置きたい

解決法

以下のコマンドを pom.xml と同じレベルのディレクトリで実行する。

$ mvn dependency:copy-dependencies

このコマンドは、プロジェクトが依存するライブラリを target/dependency 直下にコピーする。

このコマンドはテスト実行時にのみ必要となるライブラリもコピーする。テスト実行時のみ利用するライブラリをコピー時に除くには、以下のコマンドを実行する。

$ mvn dependency:copy-dependencies -DincludeScope=runtime

参考

以下のリンク先のように、POM の中で設定する方法もあるらしい(節 1 参照)。こちらのほうが、ライブラリディレクトリ名の設定などもできるため、柔軟っぽい。