種類 内容 備考 OS CentOS 7.5 (1804) 本稿記述時の最新版 実行系 java 1.8.0_181 (JVM) CentOS に付属
Kotlin でコンパイルした jar を実行します言語 Kotlin 1.2.71 本稿記述時の最新版
Linux に Kotlin コンパイラをインストールする方法は、下記の通り 2 種類あります。
どちらもローカル (ユーザディレクトリ) にインストールできます。
インストール方法 設置先
(ローカルユーザ)設置先
(システム)備考 A. 圧縮ファイルを展開してインストール ● △ 展開されたディレクトリをシステムのディレクトリに
コピーすることにより、複数アカウントで使用可能。B. SDKMAN を使用してインストール ● - ユーザごとにインストールが必要。
ローカルにインストールする場合は管理者 (root) で作業する必要がありません。
その時は、不要になった時点でディレクトリごと削除できるため便利です。
本稿は、Kotlin の公式ページを参照して作成しました。
A. 圧縮ファイルを展開してインストール
A-1. 圧縮ファイルを取得する。
Web ブラウザで GitHub の Kotlin リリースページ を開き、A-2. 圧縮ファイルを解凍する。
kotlin-compiler-1.2.71-linux-x64.zip (圧縮ファイル) をダウンロードする。
→ 要するに、
$ wget http://github.com/JetBrains/kotlin/releases/download/v1.2.71/kotlin-compiler-1.2.71-linux-x64.zip
でファイルを取得する。
$ unzip kotlin-compiler-1.2.71-linux-x64.zipA-3. 実行を確認する。
$ LANG=c tree ./kotlinc | head -15
解凍されたディレクトリは、こんな感じになる
./kotlinc |-- bin | |-- kotlin | |-- kotlin-compiler | |-- kotlin-dce-js | |-- kotlinc | |-- kotlinc-js | |-- kotlinc-jvm | `-- rt | |-- bin | | `-- unpack200 | |-- jetrt | | |-- dynlookup15008144.tbl | | |-- libXAWT15008144.so | | |-- libXCP215008144.so
$ ./kotlinc/bin/kotlincA-4. システムディレクトリへコピーする。
REPL (対話モード) で実行を確認する。
Welcome to Kotlin version 1.2.71 (JRE 1.8.0_144-jdk_2017_08_24_20_46-b00) Type :help for help, :quit for quit >>> println("Hello, world!")⏎ Hello, world! >>> :quit⏎
複数ユーザで使用する場合は、システムディレクトリにコピー (移動) する。→ 2. コンパイルと実行へ
$ su
# mv ./kotlinc/ /usr/local/.
# chowon -R root:root /usr/local/kotlinc/
# exit
$ /usr/local/kotlinc/bin/kotlinc -version
info: kotlinc-jvm 1.2.71 (JRE 1.8.0_144-jdk_2017_08_24_20_46-b00)
B. SDKMAN を使用してインストール
B-1. SDKMAN をインストールする。
なんとも怪しげだけれど、以下を実行する。B-2. SDKMAN を使用して kotlin をインストールする。
$ curl -s https://get.sdkman.io | bash
この怪しげな実行により、/home/User/.sdkman/ が作成され、
-+syyyyyyys: `/yho:` -yd. `/yh/` +m. .oho. hy .` .sh/` :N` `-/o` `+dyyo:. .yh:` `M- `-/osysoym :hs` `-+sys: hhyssssssssy+ .sh:` `N: ms/-`` yy.yh- -hy. `.N-````````+N. `od/` `N- -/oM- ddd+` `sd: hNNm -N: :do` .M. dMMM- `ms. /d+` `NMMs `do .yy- :N` ```mMMM. - -hy. /MMM: yh `+d+` `:/oo/` `-/osyh/ossssssdNMM` .sh: yMMN` /m. -dh- :ymNMMMMy `-/shmNm-`:N/-.`` `.sN /N- `NMMy .m/ `oNs` -hysosmMMMMydmNmds+-.:ohm : sd` :MMM/ yy .hN+ /d: -MMMmhs/-.` .MMMh .ss+- `yy` sMMN` :N. :mN/ `N/ `o/-` :MMMo +MMMN- .` `ds mMMh do /NN/ `N+....--:/+oooosooo+:sMMM: hMMMM: `my .m+ -MMM+ :N. /NMo -+ooooo+/:-....`...:+hNMN. `NMMMd` .MM/ -m: oMMN. hs -NMd` :mm -MMMm- .s/ -MMm. /m- mMMd -N. `mMM/ .- /MMh. -dMo -MMMy od. .MMMs..---yh +MMM. sNo`.sNMM+ :MMMM/ sh`+MMMNmNm+++- mMMM- /--ohmMMM+ :MMMMm. `hyymmmdddo MMMMh. ```` `-+yy/`yMMM/ :MMMMMy -sm:.``..-:-.` dMMMMmo-.``````..-:/osyhddddho. `+shdh+. hMMM: :MmMMMM/ ./yy/` `:sys+/+sh/ .dMMMMMMmdddddmmNMMMNNNNNMMMMMs sNdo- dMMM- `-/yd/MMMMm-:sy+. :hs- /N` `/ymNNNNNNNmmdys+/::----/dMMm: +m- mMMM+ohmo/.` sMMMMdo- .om: `sh `.-----+/.` `.-+hh/` `od. NMMNmds/ `mmy:` +mMy `:yy. /moyso+//+ossso:. .yy` `dy+:` .. :MMMN+---/oys: /+m: `.-:::-` /d+ +MMMMMMMNh:` +MN/ -yh. `+hddhy+. /MM+ .sh: :NMo -sh/ -NMs `/yy: .NMy `:sh+. `mMm` ./yds- `dMMMmyo:-.````.-:oymNy:` +NMMMMMMMMMMMMMMMMms:` -+shmNMMMNmdy+:` Now attempting installation... Looking for a previous installation of SDKMAN... SDKMAN found. ====================================================================================================== You already have SDKMAN installed. SDKMAN was found at: /home/User/.sdkman Please consider running the following if you need to upgrade. $ sdk selfupdate force ======================================================================================================
.bashrc (ログインごとに実行されるファイル) の末尾に以下が追加される。
$ LANG=c tree .sdkman/ | head -15※ User は、作業中のユーザ ID を指します。適宜自分の ID に読み替えてください。
?tr> #THIS MUST BE AT THE END OF THE FILE FOR SDKMAN TO WORK!!! export SDKMAN_DIR="/home/User/.sdkman" [[ -s "/home/User/.sdkman/bin/sdkman-init.sh" ]] && source "/home/User/.sdkman/bin/sdkman-init.sh"
.sdkman |-- archives |-- bin | `-- sdkman-init.sh |-- candidates |-- etc | `-- config |-- ext |-- src | |-- sdkman-availability.sh | |-- sdkman-broadcast.sh | |-- sdkman-cache.sh | |-- sdkman-current.sh | |-- sdkman-default.sh | |-- sdkman-env-helpers.sh | |-- sdkman-flush.sh | |-- sdkman-help.sh
上記 B-1 により、ログインすれば (.bashrc が自動実行されることにより) コマンド sdk を使えるようになった。B-3. 実行を確認する。
なので、別の端末を開いて (同一のアカウントでログインしなおす)、Kotlin のインストールを続行する。
$ sdk install kotlin
$ which kotlinc
==== BROADCAST ================================================================= * 17/10/18: sbt 1.2.5 released on SDKMAN! #scala * 16/10/18: Springboot 2.0.6.RELEASE released on SDKMAN! #springboot * 16/10/18: Micronaut 1.0.0.RC3 released on SDKMAN! #micronautfw ================================================================================ Downloading: kotlin 1.2.71 In progress... #################### << kotlin がダウンロードされてゆく>> ############### 100.0% Installing: kotlin 1.2.71 Done installing! Setting kotlin 1.2.71 as default.
$ LANG=c tree .sdkman/ | head -15
~/.sdkman/candidates/kotlin/current/bin/kotlinc
SDKMAN を使用して kotlin をインストールした場合は、./sdkman/candidates/kotlin/ として配置される。
.sdkman |-- archives | `-- kotlin-1.2.71.zip |-- bin | `-- sdkman-init.sh |-- candidates | `-- kotlin | |-- 1.2.71 | | |-- bin | | | |-- kotlin | | | |-- kotlin-dce-js | | | |-- kotlin-dce-js.bat | | | |-- kotlin.bat | | | |-- kotlinc | | | |-- kotlinc-js
$ kotlinc→ 2. コンパイルと実行へ
REPL (対話モード) で実行を確認する。
Welcome to Kotlin version 1.2.71 (JRE 1.8.0_144-jdk_2017_08_24_20_46-b00) Type :help for help, :quit for quit >>> println("Hello, world!")⏎ Hello, world! >>> :quit⏎
2-1. ソースファイルを作成する。
$ cat > hello.kt << EOF2-2. コンパイルする。
fun main(args: Array<String>) { println("Hello, World!") } EOF
$ cat hello.kt
fun main(args: Array<String>) { println("Hello, World!") }
$ kotlinc hello.kt -include-runtime -d hello.jar2-3. 実行する。
kotlinc は、上記 B でインストールしたときの実行例です。読み替えて実行してください。$ ls -gGh hello.jar
./kotlinc/bin/kotlinc … A-3 でインストールした場合 /usr/local/kotlinc/bin/kotlinc … A-4 でインストールした場合 kotlinc … B でインストールした場合
ランタイムライブラリもリンク (-include-runtime) したので、サイズが大きい。
-rw-rw-r--. 1 928K 10月 17 15:04 hello.jar
$ which java
$ java -version
/bin/java
$ java -jar hello.jar
openjdk version "1.8.0_181" OpenJDK Runtime Environment (build 1.8.0_181-b13) OpenJDK 64-Bit Server VM (build 25.181-b13, mixed mode)
Hello, World!