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
サンプルプロジェクト

Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account log in.