技術関係

Gradleの「bootJar タスク」と「jar タスク」で生成されるjarファイルの違い

Gradleタスクの bootJarとjar で生成されるjarの違いをちゃんと理解してなかったので備忘録として残しておく

スポンサーリンク
スポンサーリンク

「bootJar」タスク は 実行可能なjarファイルが生成される

bootJarタスクを実行してtreeコマンドで生成したファイルを見てみる。

生成されるのは build/libs/ 以下でファイル名は「モジュール名.jar」

/ treeコマンドを使いたいので homebrewでinstallしておく
$ brew install tree

$ tree -l --filelimit 4
.
├── BOOT-INF
│   ├── classes
│   │   ├── META-INF
│   │   │   └── moge-api.kotlin_module
│   │   ├── application.yml
│   │   └── com
│   │       └── moge
│   │           └── sample  [5 entries exceeds filelimit, not opening dir]
│   ├── classpath.idx
│   ├── layers.idx
│   └── lib  [39 entries exceeds filelimit, not opening dir]
├── META-INF
│   └── MANIFEST.MF
└── org
    └── springframework
        └── boot
            └── loader  [19 entries exceeds filelimit, not opening dir]

BOOT-INFとMETA-INFとjarを起動するloaderのディレクトリが存在する。

bootJarタスク = 実行可能jarファイル 生成ということで普段のアプリケーションのデプロイ等ではこっちを使うことが多いはず。

「jar」タスク は クラスファイルが生成される

jarタスクを実行してtreeコマンドで生成したファイルを見てみる。

生成されるのは build/libs/ 以下でファイル名は「モジュール名-plain.jar」

$ tree -l --filelimit 4
.
├── META-INF
│   ├── MANIFEST.MF
│   └── linkage-tenants-api.kotlin_module
├── application.yml
└── com
    └── moge
        └── sample  [5 entries exceeds filelimit, not opening dir]

META-INFとクラスファイルのみ生成される。

単体のアプリケーションとして実行できないファイルになるが、ライブラリ等として配布する時に使えたりする。

「build」 タスクでは両方の jar が生成される

buildタスクを実行すると「モジュール名.jar」と「モジュール名-plain.jar」が生成される。

前述した通りアプリケーションデプロイでは実行可能なjarファイルが必要になるのでplain.jarは使いみちがない。

特に必要ないのであればbuild.gradleの設定で生成されないようにしておくと吉。

【build.gradle.kts】plain.jar を生成しない

tasks.getByName("jar") {
    enabled = false
}

【build.gradle】plain.jar を生成しない

jar {
    enabled = false
}

これでbuildタスクを実行してもplain.jarは生成されない。

またjarタスクを実行してもplain.jarは生成されない。

まとめ

  • 「bootJar」タスク は 実行可能なjarファイルを生成
  • 「jar」タスク は クラスファイルを生成
  • 「build」 タスクでは両方の jar を生成
  • 一般的なデプロイではExecutableな「モジュール名.jar」を使う。

アプリケーションデプロイ用のjarが必要な時は 「bootJar」タスク または「build」タスクを実行してjarファイルを使用する。

【補足】jar ファイルの解凍方法

macでjarファイルの解答は The Unarchiver というアプリを使いました。

https://apps.apple.com/jp/app/the-unarchiver/id425424353?mt=12

環境

  • Spring Boot 2.6.5
  • Gradle 7.3.3

参考

eclipseで作成するjavaの「実行可能JARファイル」…. Yahoo!知恵袋

Spring Boot 実行可能な Jar 形式 / spring.pleiades.io

コメント

タイトルとURLをコピーしました