色々訳あってMavenリポジトリで管理されていないライブラリがありました。
<dependency>
<groupId>fukasawah</groupId>
<artifactId>XXXXXX</artifactId>
<version>1.0</version>
<scope>system</scope>
<systemPath>${project.basedir}/lib/XXXXXX.jar</systemPath>
</dependency>
このjarをwarに含めたい。
今回はそれが出来る方法を2つご紹介。
maven-dependency-plugin
を使うやり方
デフォルトではsystemスコープの依存関係はwarに含まれないようです。
しかし、warファイルを作る作業の中に、特定のディレクトリにあるものをzipにする作業をします。
なので、zipにする直前にmaven-dependency-plugin
でコピーする作業を入れるとよいです。
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<phase>prepare-package</phase><!-- ここ大事 -->
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<outputDirectory>${project.build.directory}/${project.build.finalName}/WEB-INF/lib</outputDirectory>
<includeArtifactIds>XXXXXX</includeArtifactIds>
</configuration>
</execution>
</executions>
</plugin>
prepare-package
が大事で、package
ではwarファイル作成後にファイルがコピーされてしまい、warに含まれてない状態になる。
また、この時、${artifactId}-${version}.jar
という形式で配置される。
maven-war-plugin
を使うやり方
Mavenの依存関係の恩恵がなくなりますが、書き方は一番素直な感じがする。
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<configuration>
<webResources>
<resource>
<directory>lib</directory>
<targetPath>WEB-INF/lib</targetPath>
<includes>
<include>XXXXXX.jar</include>
<!-- <include>**/*.jar</include> --><!-- ワイルドカードも使える -->
</includes>
</resource>
</webResources>
</configuration>
</plugin>
こっちは単純なファイルコピーなので、artifactIdも関係ないし、versionは含まれない。