Как запустить скомпилированный файл класса в Kotlin? - PullRequest
22 голосов
/ 20 февраля 2012

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?

Ответы [ 5 ]

44 голосов
/ 16 октября 2014

Зная имя вашего основного класса

В настоящее время (Kotlin начиная с M14, включая до 1,0 бета-версии), чтобы запустить класс 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 вашего приложения и любые зависимости.Для JAR-файлов, специфичных для Kotlin, за пределами Maven / Gradle вам нужен дистрибутив Kotlin, который содержит:

  • kotlin-runtime.jar (комбинированная среда выполнения и stdlib)
  • kotlin-reflect.jar только при использовании отражения Kotlin
  • kotlin-test.jar для модульных тестов, использующих классы утверждений Kotlin

В Maven / Gradle в настоящее время также существует отдельный kotlin-stdlib.jar

, работающий от Intellij

Если в Intellij (если это ваша IDE) вы можете щелкнуть правой кнопкой мыши по функции main() и выбрать «Выполнить», она создаст для вас конфигурацию времени выполнения и покажет полное имя класса, которое будет использоваться.Вы всегда можете использовать это, если не уверены в названии сгенерированного класса.

Запуск из Gradle

Вы также можете использовать плагин Gradle Application для запуска процессаиз Gradle, или для создания работающей системы, которая включает в себя zip / tgz вашего JAR-файла и все его зависимости, а также сценарий запуска.Используя приведенный выше пример класса, вы добавили бы это к вашему 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

Если у вас есть исполняемый JAR и предполагается, что KOTLIN_LIB указывает на каталог, в котором находятся файлы библиотеки времени выполнения Kotlin:

java -cp $KOTLIN_LIB/kotlin-runtime.jar:MyApp.jar com.my.stuff.AppKt

См. Выше примечания о других файлах JAR, которые могут вам понадобиться.Небольшое отклонение, если у вас есть работающий 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».

Создание исполняемого JAR-файла с помощью компилятора Kotlin

Это не очень распространено, поскольку большинство людей используют другие инструменты сборки, но компилятор Kotlin может создать исполняемый Jar-файл, который решит эту проблему за вас (см. http://kotlinlang.org/docs/tutorials/command-line.html), когда он объединяет среду выполнения и ваш код. Хотя это не так часто встречается при использовании таких инструментов, как Maven и Gradle, или сборок IDE. Затем запустите с использованием обычной Java:

java -jar MyApp.jar
5 голосов
/ 20 февраля 2012

Мы столкнулись с той же программой и разместили в блоге наше решение здесь: http://blog.ocheyedan.net/blog/2012/02/19/running-kotlin-code/

По сути, вам просто нужно вызвать java с параметром -cp и основным классом «пространства имен».Исходя из вашего вопроса, вызов Java будет выглядеть примерно так:

java -cp /usr/local/kotlin/lib/kotlin-runtime.jar:dist/namespace.class namespace
2 голосов
/ 20 февраля 2012

Обновление: в более новых версиях плагина Kotlin IDE вы можете использовать контекстные Run-действия во всплывающем меню Редакторы.

Если вы находитесь в IDE, щелкните правой кнопкой мыши на редакторе и выберите«Run namespace» В противном случае скомпилируйте и запустите класс * .namespace как обычный класс Java.

0 голосов
/ 03 декабря 2016

документы дают приятный и краткий ответ:

kotlinc hello.kt -include-runtime -d hello.jar

java -jar hello.jar

koclinc находится в вашем каталоге IntelliJ IDEA в IntelliJ\plugins\Kotlin\kotlinc\bin.
Если вы работаете в Windowsиспользуйте kotlinc-jvm.bat

0 голосов
/ 27 апреля 2014

Я запускаю флягу, в которой используется kotlin вот так

java -cp target/idea_test-1.0-SNAPSHOT.jar:lib/kotlin-runtime.jar testing.first seyfer

Привет, Сейфер, семя!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...