Вопрос или проблема
Пример кода можно найти по адресу https://github.com/KyleMcB/demo. Я не могу разобраться, как запустить приложение на Kotlin JVM из командной строки. IntelliJ запускает его в своей встроенной оболочке с интерактивным вводом, но я хочу распределить это как программу командной строки. Программа просто пытается использовать readln()
fun main() {
val name = readln()
println("Hello, " + name + "!")
}
Когда я использую ./gradlew run, я получаю
euclid@kyles-MBP-3 ~/D/democli (main)> ./gradlew clean run
> Задача :run НЕУДАЧА
Ошибка: Не удалось найти или загрузить главный класс MainKt
Причина: java.lang.ClassNotFoundException: MainKt
НЕУДАЧА: Сборка завершилась с исключением.
* Что пошло не так:
Ошибка выполнения задачи ':run'.
> Процесс 'команда '/Users/euclid/Library/Java/JavaVirtualMachines/corretto-19.0.2/Contents/Home/bin/java'' завершился с ненулевым кодом выхода 1
* Попробуйте:
> Запустите с параметром --stacktrace, чтобы получить трассировку стека.
> Запустите с параметром --info или --debug, чтобы получить больше вывода в журнал.
> Запустите с параметром --scan, чтобы получить полные сведения.
> Получите больше помощи на https://help.gradle.org.
СБОРКА НЕ УДАЛАСЬ за 545 мс
3 действия, которые можно выполнить: 3 выполнены
Когда я пытаюсь запустить скрипт в папке сборки, я получаю
euclid@kyles-MBP-3 ~/D/democli (main)> build/scripts/democli
Ошибка: Не удалось найти или загрузить главный класс MainKt
Причина: java.lang.ClassNotFoundException: MainKt
Как я могу запустить приложение командной строки на jvm?
Ответ или решение
Чтобы запустить интерактивное приложение на Kotlin через командную строку, следуйте следующим шагам:
-
Убедитесь, что у вас установлен Kotlin и Gradle. Если вы еще не установили Kotlin, вы можете скачать его с официального сайта Kotlin и установить для использования с Gradle.
-
Настройка проекта Gradle. Вам необходимо убедиться, что ваш проект правильно настроен. В вашем
build.gradle.kts
(илиbuild.gradle
в Groovy) необходимо указать правильные зависимости и конфигурации. Пример настройки для проекта Kotlin:
plugins {
kotlin("jvm") version "1.8.0" // Убедитесь, что у вас установлена последняя версия Kotlin
}
repositories {
mavenCentral()
}
dependencies {
implementation(kotlin("stdlib"))
}
tasks.register<JavaExec>("runApp") {
group = "application"
description = "Запускает приложение"
classpath = sourceSets.main.get().runtimeClasspath
mainClass.set("MainKt") // Убедитесь, что это имя вашего файла с функцией main, например Main.kt
}
- Создание файла с кодом. Убедитесь, что ваш файл с кодом (например,
Main.kt
) находится вsrc/main/kotlin
. Ваш код должен выглядеть так:
fun main() {
val name = readln()
println("Hello, $name!")
}
- Сборка проекта. С помощью Gradle соберите проект с командой:
./gradlew build
- Запуск приложения. Запустите ваше приложение с помощью заранее определенной задачи
runApp
:
./gradlew runApp
Если вы хотите запустить его напрямую из скомпилированного кода, убедитесь, что вы используете правильный путь к классам:
java -cp build/classes/kotlin/main MainKt
- Проверка на ошибки. Если вы сталкиваетесь с ошибками, такими как
ClassNotFoundException
, проверьте, правильно ли вы указали имя класса. В Kotlin класс, содержащий функциюmain
, компилируется в класс с именемMainKt
, если функция расположена в файлеMain.kt
.
Если ошибка продолжает появляться, убедитесь, что у вас есть правильная структура директорий и правильно указан путь к скомпилированным классам.
С этими шагами ваше приложение на Kotlin должно успешно запускаться в командной строке.