実行可能jarを作成する (Gradle 7.1+Gradle Kotlin DSL)
自己満足プログラムを書いたときに、実行可能jarを作成する方法を調べた。
環境
$ ./gradlew -version
------------------------------------------------------------
Gradle 7.1
------------------------------------------------------------
Build time: 2021-06-14 14:47:26 UTC
Revision: 989ccc9952b140ee6ab88870e8a12f1b2998369e
Kotlin: 1.4.31
Groovy: 3.0.7
Ant: Apache Ant(TM) version 1.10.9 compiled on September 27 2020
JVM: 11.0.3 (Oracle Corporation 11.0.3+12-LTS)
OS: Mac OS X 10.16 x86_64
build.gradle.kts
以下を追記する。
// https://www.jetbrains.com/help/idea/create-your-first-kotlin-app.html#package-as-jar
tasks.jar {
duplicatesStrategy = DuplicatesStrategy.EXCLUDE
manifest {
attributes["Main-Class"] = "com.example.MainKt"
}
configurations["runtimeClasspath"].forEach { file: File ->
from(zipTree(file.absoluteFile))
}
}
DuplicatesStrategyを入れないと以下のエラーとなる。
What went wrong:
Execution failed for task ‘:jar’. Entry META-INF/versions/9/module-info.class is a duplicate but no duplicate handling strategy has been set. Please refer to https://docs.gradle.org/7.1/dsl/org.gradle.api.tasks.Copy.html#org.gradle.api.tasks.Copy:duplicatesStrategy for details.
Gradle 6.7では発生していなかったので、Gradleの挙動によるもののようだ。
jarの作成
./gradlew clean jar
実行
java -jar build/libs/executable-jar-1.0-SNAPSHOT.jar
注意
実行可能なjarを作る時に注意しないといけないのがjarの依存関係。複雑な依存関係を持つプログラムの実行可能jarを作るために、昔かなり苦労した記憶がある。上記のやり方だけでは足りないかもしれない。でも、何かの参考になれば。
今回試したプログラムは以下にあります。 example/Kotlin/executable-jar at master · eiKatou/example
投稿日 2021年08月15日