想定読者
- gradle の task で jar ファイルを作成する方法を知りたい人
結論
-
基本的には build task を実行すれば ok
linux cli./gradlew build
ただ、別の task を利用して jar を生成することも可能
以下はそういった別の task も含めた解説
解説
-
jar ファイルの作成には jar, bootJar, build の 3 つの task が利用できる
jar
- plain jar を作成する (依存関係 や マニフェストファイルは含まれない)
- ライブラリとして使用する jar の作成に使用される
- (jarファイル名)-plain.jar の形式で ./build/libs/ に出力される
bootJar
- 実行可能 jar を作成する (全ての依存関係を含み、単独で実行可能)
- (jarファイル名).jar の形式で ./build/libs/ に出力される
build
- plain jar 、及び実行可能 jar を作成する
- bootJar task と jar task を両方実行したときと同じ結果が得られる
- そのため、基本的には build task によって jar を生成すれば良い
(補足) plain jar と 実行可能 jar の違いについて
上述の通り、依存関係とマニフェストファイルが含まれているかが異なる
生成された jar ファイルを解凍してディレクトリ構成を確認した結果を以下に示す
plain.jar
root
├─com
│ └─example
│ └─demo2
└─META-INF
実行可能.jar
root
├─BOOT-INF
│ ├─classes
│ │ └─com
│ │ └─example
│ │ └─demo2
│ └─lib
├─META-INF
│ └─services
└─org
└─springframework
└─boot
:
(略)
差分は以下 2 点である
①META-INF 配下にマニフェストファイルを含むディレクトリが存在する
➁springframework の依存関係が含まれている
Tips
./gradlew task -all から各 task の詳細を確認できる
以下は bootJar と jar の説明を抜粋したもの
linux cli
> ./gradlew task --all
:
bootJar - Assembles an executable jar archive containing the main classes and their dependencies.
:
(中略)
:
jar - Assembles a jar archive containing the classes of the 'main' feature.
:
一方の jar だけが欲しい場合
- jar task または bootJar を使用する、もしくは build.gradle に以下を記載することで不要な jar が出力されなくなる
build.gradle
jar {
enabled = false
}
あるいは
build.gradle
bootJar {
enabled = false
}