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

17

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?

    
задан kwatch 20.02.2012 в 04:01
источник

5 ответов

5

Мы столкнулись с той же программой и разместили наше решение здесь: Ссылка

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

java -cp /usr/local/kotlin/lib/kotlin-runtime.jar:dist/namespace.class namespace
    
ответ дан blangel 20.02.2012 в 05:01
источник
35

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

В настоящее время (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 и любые зависимости. Для Kotlin конкретных JARs, когда за пределами 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 для запуска процесса из 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

Если у вас есть 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, который решает это для вас (см. Ссылка ), когда он объединяет среду выполнения и ваш код вместе. Хотя это не так часто встречается при использовании таких инструментов, как Maven и Gradle, или сборки IDE. Затем выполните обычную Java:

java -jar MyApp.jar
    
ответ дан Jayson Minard 16.10.2014 в 12:51
источник
2

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

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

    
ответ дан Andrey Breslav 20.02.2012 в 07:16
источник
0

Я запускаю jar, которые используют kotlin как это

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

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

    
ответ дан Oleg Abrazhaev 27.04.2014 в 06:33
источник
0

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

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

java -jar hello.jar

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

    
ответ дан arboreal shark 03.12.2016 в 00:10
источник