Kotlin を Gradle でビルドする minimal サンプル

f:id:Naotsugu:20170802235103p:plain


Gradle プロジェクトの準備

init タスクでプロジェクト準備します(gradle は導入済みの前提)。

$ mkdir kotlin-example
$ cd kotlin-example
$ gradle init

kotlin-gradle-plugin を使うよう build.gradle を編集します。

plugins {
    id "org.jetbrains.kotlin.jvm" version "1.1.3-2"
}

apply plugin: 'application'

mainClassName = 'code.example.HelloWorldKt'

repositories {
    jcenter()
}

dependencies {
    compile "org.jetbrains.kotlin:kotlin-stdlib-jre8"
}

依存にはkotlinの標準ライブラリを指定します。JDK8 用に kotlin-stdlib-jre8 を使っています。

application プラグインで実行するメインクラスは末尾にKt が付与されたクラスとして指定します。

f:id:Naotsugu:20170803185749p:plain

ソースファイルの作成

パッケージとソースファイル作成します。

$ mkdir -p src/main/kotlin/code/example
$ touch src/main/kotlin/code/example/HelloWorld.kt

HelloWorld.kt を以下のように編集します。

package code.example

fun main(args: Array<String>) {
    println("Hello World!!")
}

ビルド&実行

ビルドします

$ ./gradlew build
$ ./gradlew 

実行

$ ./gradlew run

> Task :run
Hello World!!

以上最低限のサンプルでした。




ここからは番外編。

ビルドスクリプトをKotlinで書く

Gradle では、kotlin-dsl(https://github.com/gradle/kotlin-dsl) により、ビルドスクリプトを Kotlin で書くことができます。

現在の Gradle 4.0.2 では、前述の build.gradlebuild.gradle.kts (Kotlin Script) にリネームして、以下のように変更してビルドできます。

plugins {
     application
}

configure<ApplicationPluginConvention> {
    mainClassName = "code.example.HelloWorldKt"
}

configure<JavaPluginConvention> {
    setSourceCompatibility(1.8)
    setTargetCompatibility(1.8)
}

repositories {
    jcenter()
}

dependencies {
    compile(kotlinModule("stdlib"))
}

以前(kotlin-dsl v0.8.0)は settings.gradle に、以下のようにビルドファイル名を指定する必要がありました。

rootProject.buildFileName = 'build.gradle.kts'

しかし現在は、build.gradlebuild.gradle.kts に変更するだけで動きます(Gradle 4.0.2 に含まれる kotlin-dsl のバージョンが若干さだかではないですが、多分 kotlin-dsl v0.8.0 〜 v0.9.0 あたりな気がします)。


2017年5月あたりでは、build.gradle.kts は以下のように書く必要がありました。

apply<ApplicationPlugin>()

configure<ApplicationPluginConvention> {
    mainClassName = "samples.HelloWorld"
}

configure<JavaPluginConvention> {
    setSourceCompatibility(1.7)
    setTargetCompatibility(1.7)
}

repositories {
    jcenter()
}

dependencies {
    testCompile("junit:junit:4.12")
}

そして、Gradle 4.1 向けに現在絶賛開発中の kotlin-dsl では、以下のように書くことができる模様です。

plugins {
    application
}

application {
    mainClassName = "samples.HelloWorld"
}

java {
    sourceCompatibility = JavaVersion.VERSION_1_7
    targetCompatibility = JavaVersion.VERSION_1_7
}

dependencies {
    testCompile("junit:junit:4.12")
}

repositories {
    jcenter()
}

ここまで来ると、もはやこれが Kotlin のコードなんて、、見分けがつきませんね。