Kotlin+Spark+GradleでDocker環境構築
はじめに
今回はDocker
を利用したKotlin
, Spark
環境を構築していきます
Kotlin を Java の知識なしにやることになったのですが、JVM の知識や環境構築を一切知らない状態だったのでネットを調べながらやろうとしたのですが、gradle であったり、IntellJ であったり、VSCode(Windows)で開発してきた私にはまったく理解できない記事がほとんどでかなり時間がかかってしまいました。
そこで現状動いた環境の構築手順をまとめます。
今回学習している本は以下になります
このハンズオンで Spark を用いたサーバーが起動するところまで確認ができます
環境
Windows 11
VSCode
Ubuntu 20.04 (WSL2)
Docker 20.10.12
docker-compose version v2.2.3
git version 2.25.1
環境構築
まずは Docker 周りのファイルを作成します
$ mkdir kotlin-spark-handson
$ cd kotlin-spark-handson
$ touch Dockerfile
$ touch docker-compose.yml
作成したファイルに以下を記載します
FROM zenika/alpine-kotlin
RUN apk add gradle
version: '3'
services:
app:
build: .
container_name: kotlin
working_dir: /app
volumes:
- ./:/app
ports:
- "4567:4567"
kotlin が起動できるか確認します
$ docker-compose build
$ docker-compose up
次にgradle
のプロジェクトを作成します
別のターミナルを開いて以下を実行します
$ docker exec -it kotlin sh
$ gradle init
ファイルが色々作成されました
別ターミナルを開らいてファイルの権限を変更しておきます
$ sudo chown -R ユーザー名:ユーザー名 ./*
次にgradle
コマンドで kotlin を実行するときの設定をbuild.gradle
に書きます
plugins {
id "org.jetbrains.kotlin.jvm" version "1.3.72"
}
apply plugin: 'kotlin'
apply plugin: 'application'
mainClassName = 'demo.HelloKt'
defaultTasks 'run'
repositories {
mavenCentral()
}
dependencies {
compile "org.jetbrains.kotlin:kotlin-gradle-plugin:1.3.72"
compile "com.sparkjava:spark-core:2.6.0"
}
この設定ファイルは以下を参考にしました
またバージョンを新しいものにしないとエラーになったので1.3.72
としました
次にサンプルの実行ファイルを用意します
$ mkdir -p ./src/main/kotlin/demo
$ touch ./src/main/kotlin/demo/Hello.kt
Hello.kt を以下にします
package demo
import spark.Spark.get
fun main(args: Array<String>) {
get("/hello") { req, res -> "Hello World" }
}
実際に実行してみます
$ gradle
/app # gradle
Starting a Gradle Daemon, 1 incompatible and 1 stopped Daemons could not be reused, use --status for details
> Task :compileKotlin
w: /app/src/main/kotlin/demo/Hello.kt: (5, 19): Parameter 'req' is never used, could be renamed to _
w: /app/src/main/kotlin/demo/Hello.kt: (5, 24): Parameter 'res' is never used, could be renamed to _
> Task :compileJava NO-SOURCE
> Task :processResources NO-SOURCE
> Task :classes UP-TO-DATE
> Task :run
SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
ブラウザを開いてlocalhost:4567/helloにアクセスします
以下の画面になれば成功です
おわりに
ここまでの内容はあくまで書籍のサーバー起動の箇所までを動かすために作成したものになるので今後不都合があるかもしれません。ご了承ください
なんとか時間はかかりましたがサーバー起動までいけたのでよかったです。別のフレームワークだとまたやり方が変わってきて時間がかかりそうです。
はやく環境構築から解放されて、Kotlin 自体の学習をしたいものです
今回作成したリポジトリは以下になります
Discussion