Maven 入門 | その他 | package 時に library を含める
package を実行するとき、WAR プロジェクトでは特別に指定しなくても dependency のライブラリファイルが WEB-INF/lib にコピーされて含まれる。一方、JAR プロジェクトでは明示的に設定しない限り含まれない。
含めて package する必要がある場合は、次のように設定する。
dependency ライブラリファイルを特定ディレクトリへコピーする
Maven Dependency Plugin の dependency:copy-dependencies Goal を実行すると、dependency の JAR ライブラリファイルが {project}/target/dependency ディレクトリにコピーされる。
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 つ生成される。1 つは dependency がないファイルで、もう 1 つは dependency が含まれたファイルである。
mvn assembly:assembly
ファイル名からわかるように、"-jar-with-dependencies" が付いているファイルが dependency を含むファイルである。
- xxx-1.0.0-SNAPSHOT.jar
- xxx-1.0.0-SNAPSHOT-jar-with-dependencies.jar