Kotlin+ktor+NettyのGradleプロジェクトの雛形を作る

ktor

github.com

この記事に書いてあること

ktorのレポジトリーにMavenベースのサンプルアプリケーションが公開されています。 それらを参考にして、Gradleプロジェクトの雛形を作ります。

今回試したバージョン

  • Kotlin 1.0.3
  • ktor 0.2.1
  • Netty 4.0.30
  • Java 1.8.0_92
  • Gradle 2.9

build.gradle

buildscript {
    ext.kotlin_version = '1.0.3'
    ext.ktor_version = '0.2.1'

    repositories {
        mavenCentral()
    }

    dependencies {
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
    }
}

apply plugin: 'kotlin'
apply plugin: 'application'

repositories {
    mavenCentral()
    maven {
        url 'http://dl.bintray.com/kotlin/kotlinx.support'
    }
    maven {
        url 'http://dl.bintray.com/kotlin/ktor'
    }
}

dependencies {
    compile "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
    compile "org.jetbrains.ktor:ktor-core:$ktor_version"
    compile "org.jetbrains.ktor:ktor-locations:$ktor_version"
    runtime "org.jetbrains.ktor:ktor-netty:$ktor_version"
}

sourceSets {
    main.kotlin.srcDirs += 'src/main/kotlin'
    main.java.srcDirs += 'src/main/java'
}

mainClassName = 'org.jetbrains.ktor.netty.DevelopmentHost'

src/main/resource/application.conf

ktor {
    deployment {
        environment = development
        port = 8080
    }

    application {
        class = com.example.ApplicationMain
    }
}

src/main/kotlin/main.kt

package com.example

import org.jetbrains.ktor.application.Application
import org.jetbrains.ktor.application.ApplicationEnvironment
import org.jetbrains.ktor.application.call
import org.jetbrains.ktor.features.install
import org.jetbrains.ktor.http.respondText
import org.jetbrains.ktor.locations.Locations
import org.jetbrains.ktor.locations.get
import org.jetbrains.ktor.locations.location
import org.jetbrains.ktor.logging.CallLogging
import org.jetbrains.ktor.routing.routing
import org.jetbrains.ktor.routing.Route


@location("/")
class Index()

class Main(environment: ApplicationEnvironment) : Application(environment) {
    init {
        install(CallLogging)
        install(Locations)

        routing {
            index()
        }
    }
}

fun Route.index() {
    get<Index> {
        call.respondText("hello, world")
    }
}