28

Jetbrains はいくつかのドキュメントを提供していますが、Kotlin のコンパイル済みクラス ファイルを実行する方法が見つかりません。

こんにちは.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 プログラムの実行方法

4

5 に答える 5

51

メインクラスの名前を知る

現在 (M14 以降の Kotlin には最大 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 と依存関係が必要です。Maven/Gradle 以外の場合の Kotlin 固有の JAR には、以下を含む Kotlin ディストリビューションが必要です。

  • kotlin-runtime.jar(ランタイムと stdlib の組み合わせ)
  • kotlin-reflect.jarKotlin リフレクションを使用する場合のみ
  • kotlin-test.jarKotlin アサーション クラスを使用する単体テスト用

現在、Maven/Gradle 内には別のkotlin-stdlib.jar

Intellij からの実行

Intellij (IDE の場合) でmain()関数を右クリックして [実行] を選択すると、ランタイム構成が作成され、使用される完全修飾クラス名が表示されます。生成されたクラスの名前がわからない場合は、いつでもそれを使用できます。

Gradle からの実行

Gradle アプリケーション プラグインを使用して、 Gradleからプロセスを実行したり、JAR の zip/tgz とそのすべての依存関係、および起動スクリプトを含む実行可能なシステムを作成したりすることもできます。上記のサンプル クラスを使用して、これを に追加します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 コマンドライン ツールを使用した実行

Homebrewまたはその他のパッケージ マネージャーを介して Kotlin ツールをインストールする場合。(Mac OS X のbrew update ; brew install kotlin場合) 次に、実行するのは非常に簡単です。

kotlin -cp MyApp.jar com.my.stuff.AppKt

このコマンドは、提供されたクラスパスにランタイムを追加し、クラスを実行します。上記の「Java からの実行」セクションで説明したように、追加の Kotlin ライブラリを追加する必要がある場合があります。

Kotlin コンパイラで実行可能な JAR を作成する

ほとんどの人が他のビルド ツールを使用しているため、これはあまり一般的ではありませんが、Kotlin コンパイラは、バンドル時にこれを解決する実行可能な Jar を作成できます ( http://kotlinlang.org/docs/tutorials/command-line.htmlを参照)。ランタイムとコードを一緒に。これは、Maven や Gradle などのツール、または IDE ビルドを使用する場合には一般的ではありません。次に、通常の Java を使用して実行します。

java -jar MyApp.jar
于 2014-10-16T10:51:14.010 に答える
5

私たちは同じプログラムに出くわし、ソリューションのブログをここに投稿しました: http: //blog.ocheyedan ​​.net/blog/2012/02/19/running-kotlin-code/

基本的には、-cp と 'namespace' のメイン クラスを使用して Java を呼び出すだけです。あなたの質問から、Java 呼び出しは次のようになります。

java -cp /usr/local/kotlin/lib/kotlin-runtime.jar:dist/namespace.class namespace
于 2012-02-20T04:01:36.817 に答える
3

更新: Kotlin IDE プラグインの新しいバージョンでは、エディタのポップアップ メニューでコンテキストの実行アクションを使用できます。

IDE を使用している場合は、エディタを右クリックして [名前空間を実行] を選択します。それ以外の場合は、*.namespace クラスを通常の Java クラスとしてコンパイルおよび実行します。

于 2012-02-20T06:16:22.047 に答える
0

このようにkotlinを使用するjarを実行しています

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

こんにちはセイファーシード!

于 2014-04-27T04:33:24.840 に答える