Как запустить скомпилированный файл класса в Котлине?
Jetbrains предоставляет некоторую документацию, но я не могу найти, как запускать скомпилированный файл класса Kotlin.
hello.kt:
fun main(args : Array<String>) {
println("Hello, world!")
}
компиляции:
$ kotlinc -out dist -src hello.kt
$ ls dist
namespace.class
$ java dist/namespace
Exception in thread "main" java.lang.NoClassDefFoundError: dist/namespace (wrong name: namespace)
$ java -jar /usr/local/kotlin/lib/kotlin-runtime.jar
Failed to load Main-Class manifest attribute from
/usr/local/kotlin/lib/kotlin-runtime.jar
Как запустить программу Kotlin?
Ответы
Ответ 1
Мы столкнулись с той же программой и разместили наше решение здесь: http://blog.ocheyedan.net/blog/2012/02/19/running-kotlin-code/
В основном вам просто нужно вызвать java с -cp и основным классом "namespace". Из вашего вопроса, вызов java будет выглядеть примерно так:
java -cp /usr/local/kotlin/lib/kotlin-runtime.jar:dist/namespace.class namespace
Ответ 2
Знание имени основного класса
В настоящее время (Kotlin с M14, включая до 1 бета) для запуска класса Kotlin вы на самом деле запускаете специальный класс, созданный на уровне файла, который содержит ваши main()
и другие функции верхнего уровня (вне класса или интерфейса). Поэтому, если ваш код:
// file App.kt
package com.my.stuff
public fun main(args: Array<String>) {
...
}
Затем вы можете выполнить программу, запустив класс com.my.stuff.AppKt
. Это имя выводится из вашего имени файла с добавлением Kt
(предыдущие версии добавлены Kt
, но из более поздних бета-версий и 1.0 это Kt
). Вы можете изменить имя этого класса в файле, добавив эту аннотацию, ориентированную на файл:
@file:JvmName("MyApp")
Или вы также можете поместить свой main()
в класс со своим сопутствующим объектом и сделать его static
с помощью аннотации JvmStatic
. Поэтому ваше имя класса - это тот, который вы выбрали:
// file App.kt
package com.my.stuff
public class MyApp {
companion object {
@JvmStatic public fun main(args: Array<String>) {
...
}
}
}
Теперь для любого из этих методов вы просто запускаете класс com.my.stuff.MyApp
Какие еще файлы JAR мне нужны?
Вам нужно ваше приложение JAR и любые зависимости. Для Kotlin конкретных JAR, когда вне Maven/ Gradle вам нужно распределение Kotlin, которое содержит:
-
kotlin-runtime.jar
(комбинированное время выполнения и stdlib)
-
kotlin-reflect.jar
только при использовании отражения Котлина
-
kotlin-test.jar
для модульных тестов, которые используют классы утверждения Котлина
Внутри Maven/ Gradle в настоящее время существует также отдельный kotlin-stdlib.jar
Запуск из Intellij
Если в Intellij (если это ваша IDE) вы можете щелкнуть правой кнопкой мыши по функции main()
и выбрать "Выполнить", она создаст для вас конфигурацию времени выполнения и покажет полное имя класса, которое будет использоваться. Вы всегда можете использовать это, если не уверены в имени сгенерированного класса.
Запуск из Gradle
Вы также можете использовать Gradle Плагин приложений для запуска процесса из Gradle или для создания управляемой системы, которая включает в себя zip/tgz вашего JAR и всех его зависимостей, а также запуск script. Используя вышеприведенный класс, вы должны добавить это в свой build.gradle
:
apply plugin: 'application'
mainClassName = 'com.my.stuff.AppKt'
// optional: add one string per argument you want as the default JVM args
applicationDefaultJvmArgs = ["-Xms512m", "-Xmx1g"]
И затем из командной строки используйте:
// run the program
gradle run
// debug the program
gradle run --debug-jvm
// create a distribution (distTar, distZip, installDist, ...)
gradle distTar
Выполняется непосредственно из командной строки Java
Если у вас есть runnable JAR и предполагается, что KOTLIN_LIB
указывает на каталог, в котором хранятся файлы библиотеки времени исполнения Kotlin:
java -cp $KOTLIN_LIB/kotlin-runtime.jar:MyApp.jar com.my.stuff.AppKt
См. примечания выше о других JAR файлах, которые могут вам понадобиться. Небольшое отклонение, если у вас есть runnable JAR (с манифестом, указывающим на com.my.stuff.AppKt
в качестве основного класса):
java -cp $KOTLIN_LIB/kotlin-runtime.jar -jar MyApp.jar
Запуск с использованием инструмента командной строки Kotlin
Если вы установите инструменты Kotlin с помощью Homebrew или другого менеджера пакетов. (в Mac OS X brew update ; brew install kotlin
). Тогда это очень просто запустить:
kotlin -cp MyApp.jar com.my.stuff.AppKt
Эта команда добавляет среду выполнения к предоставленному классу, а затем запускает класс. Возможно, вам придется добавить дополнительные библиотеки Kotlin, как указано в разделе выше "Работа с Java".
Создание runnable JAR с компилятором Kotlin
Это не очень часто, так как большинство людей используют другие инструменты сборки, но компилятор Kotlin может создать исполняемый Jar, который решает это для вас (см. http://kotlinlang.org/docs/tutorials/command-line.html) при объединении среды выполнения и кода. Хотя это не так часто встречается при использовании таких инструментов, как Maven и Gradle, или сборки IDE. Затем выполните обычную Java:
java -jar MyApp.jar
Ответ 3
Обновление. В новых версиях плагина IDE Kotlin вы можете использовать контекстные действия Run во всплывающем меню "Редакторы".
Если вы находитесь в среде IDE, щелкните правой кнопкой мыши редактор и выберите "Запустить пространство имен",
В противном случае скомпилируйте и запустите класс *.namespace как обычный класс Java.
Ответ 4
Я запускаю jar, которые используют kotlin как это
java -cp target/idea_test-1.0-SNAPSHOT.jar:lib/kotlin-runtime.jar testing.first seyfer
Привет, сейфер
Семя!
Ответ 5
docs дают приятный и лаконичный ответ:
kotlinc hello.kt -include-runtime -d hello.jar
java -jar hello.jar
koclinc
находится внутри вашего каталога IntelliJ IDEA
под IntelliJ\plugins\Kotlin\kotlinc\bin
.
Если вы используете Windows, используйте kotlinc-jvm.bat