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