2
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Maven Repositoryで管理されていないjarをプロジェクトで管理して、ビルド時に実行可能jarに格納する。

Posted at

通算すると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としています(理由は後述)。

image.png

あとは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点。ひとつはscopesystemとすること。もうひとつはsystemPathにローカル環境のjarのありかを指定することです。なおproject.basedirはプロジェクトのディレクトリパスを格納している変数で、Mavenがビルド時に自動で解決してくれます。third-party.jarの設置場所をプロジェクトディレクトリ以下にしたのはこの変数project.basedirを使いたかったからですね。


Spring-Bootにおいては、Fat-jarやUber-jarと呼ばれる、必要なjarをすべて格納した実行可能jarを作成します。さてscopesystemのjarを実行可能jarに含めたい場合はincludeSystemScopetrueにする必要があります。逆にいうと、何も設定しない場合、scopesystemのjarは実行可能jarに格納されません。

<plugin>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-maven-plugin</artifactId>
  <configuration>
    <includeSystemScope>true</includeSystemScope>
  </configuration>
</plugin>
2
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?