通算すると10000回ぐらい(おおげさ)調べているので、自分用ですが、まとめておきたいと思います。なお以下の内容はSpring Bootのバージョン2.1.2.RELEASE
で実行確認しています。Spring Bootは開発スピードが速いフレームワークとして知られているため、これより古いバージョンや新しいバージョンでは事情が変化している可能性があります。あらかじめご了承ください。
Mavenを使ってライブラリ管理を行う際、Maven Repositoryを利用することが多いと思いますが、場合によってはMaven Repositoryで管理されていないjarを使用してJavaアプリケーション開発を実施する必要があります。
たとえば「third-party-jar-sample」という名前のSpring-Bootプロジェクト(Java)があって、このプロジェクトにおいてMaven Repositoryにはない「third-party.jar」を利用したいとします。まず第1ステップとして、プロジェクトのディレクトリ以下の任意の場所にthrid-party.jarを設置します。実をいうと「プロジェクトのディレクトリ以下」である必要はなく、ローカル環境であればどこでもよいのですが、以下の例では${projectdir}/lib/thrid-party.jar
としています(理由は後述)。
あとはpom.xml
に以下のようなdependencyを追加するだけです。
<dependency>
<groupId>com.example</groupId>
<artifactId>third-party</artifactId>
<version>1.0.0</version>
<scope>system</scope>
<systemPath>${project.basedir}/lib/third-party.jar</systemPath>
</dependency>
ポイントとしては2点。ひとつはscope
をsystem
とすること。もうひとつはsystemPath
にローカル環境のjarのありかを指定することです。なおproject.basedir
はプロジェクトのディレクトリパスを格納している変数で、Mavenがビルド時に自動で解決してくれます。third-party.jarの設置場所をプロジェクトディレクトリ以下にしたのはこの変数project.basedir
を使いたかったからですね。
Spring-Bootにおいては、Fat-jarやUber-jarと呼ばれる、必要なjarをすべて格納した実行可能jarを作成します。さてscope
がsystem
のjarを実行可能jarに含めたい場合はincludeSystemScope
をtrue
にする必要があります。逆にいうと、何も設定しない場合、scope
がsystem
のjarは実行可能jarに格納されません。
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<includeSystemScope>true</includeSystemScope>
</configuration>
</plugin>