毎回fatjarを作るときにやり方ググるのが面倒なので自分の記事としてメモしておきます。
なおGradleはkts版とします。Groovy版では少々記述を変える必要があります
参考
fatjarとは依存ライブラリも含めたjarファイルです。通常のbuildをした場合に生成されるjarファイルは依存ライブラリは含まれていなく、そのjarを実行する際には依存ライブラリを指定してあげる必要があります。
fatjarを生成しておくと、このjarファイルだけでプログラムの実行が可能となります。
なお、ここまでfatjarと書いていますが、実際に作成に使用するのはshadowjarです。
手順
新しいバージョンが常に出ているはずなので、最新のバージョンはこちらで確認しましょう
https://imperceptiblethoughts.com/shadow/getting-started/
build.gradle.kts
plugins {
kotlin("jvm") version "1.6.20" // ここはもともと書いてあるはず
id("com.github.johnrengelman.shadow") version "7.1.2"
id("java")
}
// jarファイルを実行時に実行されるメインファイルのクラスを指定する。
val jar by tasks.getting(Jar::class) {
manifest {
// mainメソッドが存在するファイルのパスに、末尾にKtを付与したものです。
attributes["Main-Class"] = "packagename.XxxxxXxxxxKt"
}
}
こうすることで、
gradle shadowJar
でbuild/libs/xxxxxxxxx-1.0-SNAPSHOT-all.jar
にshadowJarが生成されます。
このjarを以下のように実行すると
java -jar build/libs/xxxxxxxxx-1.0-SNAPSHOT-all.jar
先程指定したpackagename.XxxxxXxxxxKt
のmainメソッドが実行されます。
もしほかのmainメソッドを実行したい場合は
java -cp build/libs/xxxxxxxxx-1.0-SNAPSHOT-all.jar packagename.YyyyyyYyyyyyKt
のように実行することができます。この場合、build.gradle.kts
のjar manifest
の記載は不要になります。(その代わりjava -jar
では実行できない)
以上です。shadowJarを使うだけであれば、pluginに2行追加するだけで良いので非常に楽です。ただ、依存の衝突などが発生した場合は大変ですがその際はMergeStrategyを記述する必要があります。
Top comments (0)