Edited at

Gradle Shadow を使って fat JAR を作る手順

More than 1 year has passed since last update.

Gradle プロジェクトで fat JAR を作るのに、 Gradle Shadow plugin が使える。

同じような用途に使える Gradle FatJar Plugin もあるが、メンテナンスされてないため Shadow を使うように推奨されてる。


設定


build.gradle

plugins {

id 'com.github.johnrengelman.shadow' version '2.0.3'
id 'java'
}

jar {
manifest {
attributes "Main-Class" : "app.Main"
}
}


実行可能なJarを作るには、Main-Class 設定に、エントリポイントのClassを指定する必要がある。

Shadowは jar タスクの設定を引き継いで使用する。

それと別に Shadow 専用の設定として shadow を用意している。


fat JAR 作成

./gradlew shadowJar

これで build/libs 以下に .jar ファイルが作成されます。

.jar ファイルを実行するには、以下のコマンドを実行します。

java -jar xxx-1.0-SNAPSHOT-all.jar


Shadow がデフォルトでやってくれること

ドキュメントに書いてる内容の抜粋です。


  • プロジェクトの依存ライブラリを含めた .jar ファイルを作ってくれる。

  • プロジェクトの依存ライブラリを配置する時、以下のパターンのファイルをコピーしない。これらは署名Jarのファイルで、これらのファイルがコピーされると、実行時に署名の検証に失敗して「クラスが見つからないかロードできない」とエラーになってしまうのを防ぐため。


    • META-INF/INDEX.LIST

    • META-INF/*.SF

    • META-INF/*.DSA

    • META-INF/*.RSA




参考

Shadow Plugin User Guide & Examples

サンプルプロジェクト