Подтвердить что ты не робот

Как запустить скомпилированный файл класса в Котлине?

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?

4b9b3361

Ответ 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