Kotlinを始めるにはコマンドラインツールを作ってみてはと言いつつ、そういう話あんまりなくない?と思ったので書くことにした。 Gradleでfat jarを生成し、javaがあれば実行できるようにするところまで。
sdkmanでGradleをインストール
http://sdkman.io/install.html からsdkmanをインストールして、gradleをインストールする。$ sdk install gradle
gradle initで雛形の作成
適当なディレクトリを作成し、gradle initでbuild.gradle他ファイルを生成する。
$ mkdir kotlin-cmd-example $ cd kotlin-cmd-example $ gradle init
build.gradleの編集
Using Gradle - Kotlin Programming Languageを参考にして、build.gradleを記述する。kotlin-gradle-pluginを適用して、kotlin-stdlib他必要なライブラリを追加すればOK。
ここではlog出力のためのlogbackのほか、fat jarを生成するための johnrengelman/shadow を使っている。 shadowの設定については Shadow Plugin User Guide & Examples を。
plugins {
id 'org.jetbrains.kotlin.jvm' version '1.1.51'
id 'com.github.johnrengelman.shadow' version '2.0.1'
}
repositories {
mavenCentral()
}
dependencies {
compile 'org.jetbrains.kotlin:kotlin-stdlib-jre8'
compile 'org.slf4j:slf4j-api:1.7.25'
compile 'org.slf4j:jcl-over-slf4j:1.7.25'
compile 'org.slf4j:jul-to-slf4j:1.7.25'
compile 'ch.qos.logback:logback-classic:1.2.3'
}
apply plugin: 'application'
mainClassName = "com.example.kotlincmdexample.KotlinCmdExampleKt"
注意点としては、特に設定しないとJava側からはクラス名にはKtがついているのでつける。
src/main/kotlin に Kotlin ソースコードを作成
デフォルトではソースの場所はsrc/main/kotlinなので、ここにソースコードを配置していく。 IntelliJ IDEAであれば、build.gradleを開けば開始できる。
src/main/kotlin/com/example/kotlincmdexample/KotlinCmdExample.kt
package com.example.kotlincmdexample
import org.slf4j.LoggerFactory
fun main(args: Array<String>) {
val log = LoggerFactory.getLogger("com.example.kotlincmdexample.KotlinCmdExample")
if (args.isEmpty()) {
println("Usage: kotlin-cmd-example name")
return
}
log.info("Hello, {}", args[0])
}
あえてclassを作ってないのでgetLoggerが冗長な感じがするが、中途半端なのでloggerの名前を適当にしてもいいし、クラスを作って渡すかしたほうがいいかも。
./gradlew runでテスト実行
./gradlew runすれば実行できる。IDEAであれば右クリックしてRunあるいはDebugでもOK。
$ ./gradlew run
> Task :run
Usage: kotlin-cmd-example name
BUILD SUCCESSFUL in 0s
2 actionable tasks: 1 executed, 1 up-to-date
./gradlew buildでビルド(jar生成)
./gradlew buildするとbuild/distributionsにkotlin-cmd-example-shadow.tarと.zipが入っているので、これを展開すると起動スクリプトがあるので実行できる。
build/libsに-all.jarがあるので、java -jarで直接起動することも可能。
$ java -jar build/libs/kotlin-cmd-example-all.jar
Usage: kotlin-cmd-example name
$ java -jar build/libs/kotlin-cmd-example-all.jar MyFirstKotlinProject
19:49:00.796 [main] INFO com.example.kotlincmdexample.KotlinCmdExample - Hello, MyFirstKotlinProject
今回のプロジェクト
GitHubのsunnyone/kotlin-cmd-exampleに置いておくので、参考になれば。