sdkman + kotlin
В скором времени мне потребуется расширить свой стек ещё одним языком программирования — Kotlin
. Меня не беспокоит
процесс погружения в синтаксис, это самое простое, что может быть. Как и всегда, во главу угла я ставлю вопрос о
простоте, скорости и воспроизводимости развёртывания, особенно локального окружения разработчика — в команде я буду
работать не один, и важно, чтобы версии компиляторов совпадали у моих коллег до миллибитов.
Установка Kotlin
на локальной машине требует установки JDK
. Многие скажут: “ну, иди скачай, в чём проблема?”
Проблема всё та же — идентичное окружение для всех членов команды.
Точно так же, как и в случае с asdf
, для подобных java
-решений есть отдельный, хорошо зарекомендовавший себя
менеджер JDK
— sdkman
. Он позволяет:
- устанавливать различные версии
JDK
; - устанавливать их не в
/opt
или/usr/local
(что меня лично всегда огорчает), а в отдельный скрытый каталог внутри домашнего; - менять выбор текущего
JDK
по умолчанию; - ставить отдельные нужные версии инструментов, такие как
Gradle
,Maven
,Ballerina
и прочие.
Процесс установки sdkman
описан на официальном сайте. Я покажу, как установить JDK
и Kotlin
:
sdk install java 20.0.1-oracle
sdk install kotlin # самая свежая версия
Несколько слов о компиляции вручную. Понятно, что на крупных проектах всегда есть система сборки, без неё никуда. Но если вы только знакомитесь с языком, вам хочется получить результат быстрее, не создавая проект.
Допустим, вы создали файл hello.kt
:
fun main(args: Array<String>) {
var hello = "Hello, Kotlin!"
println(hello)
}
И хотите его скомпилировать в jar
:
kotlinc hello.kt -d hello.jar
При запуске, вы, скорее всего получите следующую ошибку:
Exception in thread "main" java.lang.NoClassDefFoundError: kotlin/jvm/internal/Intrinsics
at HelloKt.main(hello.kt)
Caused by: java.lang.ClassNotFoundException: kotlin.jvm.internal.Intrinsics
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641)
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521)
... 1 more
Чтобы её избежать, необходимо включить runtime
в ваш jar
:
kotlinc hello.kt -include-runtime -d hello.jar
Теперь ваш файл запустится без проблем:
java -jar hello.jar
Hello, Kotlin!
Успехов в освоении Kotlin
и устанавливайте необходимое ПО, соблюдая Unix-way.