Kotlin ~gradleでHello World~
kotlinてGUI開発ライブラリないのかよと憤慨していたがサードパーティー製でハイクオリティなtornadoFXというライブラリを見つけた。これはJavaFXを拡張してKotlinのコードで書けるようにしたものだ。開発が活発に進められていて、ガイドもしっかりしている(ただし全編英語)。いつか公式がこれをライブラリに組み込んでくれないかなーと期待。
github.com
だがこのライブラリを使うにはIDEAを使うか、mavenやgradleなどのビルドツールを使わなくてはならない。使わなくてもコンパイルまでは通せるが、実行すると謎の文言とともに大量のエラーを吐かれる。
そこで今回はまずgradleでkotlinのコードを実行できることを目標にする。gradleの導入は以下のサイトが非常にわかりやすく説明してくださっている。
qiita.com
フォルダ構成
今回はkotlinフォルダ直下のdemoフォルダにファイルを保存する。
├ src
│ ├ main
│ │ ├ kotlin
| | | ├ bin
| | | └ demo
│ │ └ java
│ └ test
│ ├ kotlin
│ └ java
├ build
| ├…
| …
|
└ build.gradle
HelloWorld.kt
クラスを持たない単純なhello world
package demo fun main(args : Array<String>){ println("Hello gradle!") }
build.gradle
kotlin公式にこう書かれているのをちょっと編集する。
kotlinlang.org
tornadofxを使うことを見越して、今回はkotlin_version = '1.1.2'、kotlinOptions.jvmTarget = "1.8"を指定する。
これは先ほど挙げたtornadofxのサイトのReadMeに書いてある。
buildscript { ext.kotlin_version = '1.1.2' repositories { mavenCentral() } dependencies { classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" } } apply plugin: 'kotlin' apply plugin: 'application' compileKotlin{ kotlinOptions.jvmTarget = "1.8" } mainClassName = 'demo.HelloWorldKt' defaultTasks 'run' repositories { mavenCentral() } dependencies { compile "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version" testCompile 'junit:junit:4.11' testCompile "org.jetbrains.kotlin:kotlin-test-junit:$kotlin_version" } task hello(type: JavaExec){ main="demo" classpath = sourceSets.main.runtimeClasspath }
javaでは一つのファイルに最低一つのクラスがあるので、taskの中にあるmain=でパッケージ名.mainメソッドを含むクラスネームを指定するが、kotlinはクラスを持たない場合もあるのでその時はパッケージ名のみを指定するのみでよいらしい。勘でやったらビルドできてしまったので詳しい仕様は知らない。またtaskのtype指定はJavaExecである。KotlinExecと書いたらそんなものはないと言われ失敗した。
上記のファイルを作成して>gradle buildを実行すると以下のように延々とダウンロードしながらビルドしてくれる。僕の環境では初回で20秒ほどかかっていた。オプションでDaemonを指定すれば次回以降は実行時間も短くなるかも?
その後>gradle runを実行するとプログラムが走る。
結果は:runのすぐ下の行に出力される。ちゃんと正しくHello gradle!と表示されている。
今後は実際にtornadofxを使って最低限のアプリ(ウィンドウ表示、ボタン、テキストボックスなどを備えたもの)を作っていこうと思う。