【问题标题】:How to use with `java` command with `kotlin-compiler.jar` to compile Kotlin source codes?如何使用带有 `kotlin-compiler.jar` 的 `java` 命令来编译 Kotlin 源代码?
【发布时间】:2017-01-04 15:08:31
【问题描述】:

我现在只能使用java 命令来编译 Kotlin 源文件。

所以经过一番尝试,我在kotlinc/lib/文件夹中找到了一个kotlin-compiler.jar文件。

然后我尝试在kotlinc/lib/中写一个Hello.kt文件

public fun main(args: Array<String>) {
    println("hello")
}

然后,我执行了命令java -jar kotlin-compiler.jar Hello.kt,它工作并生成了一个类文件HelloKt.class

结果我执行了命令java -cp ".:kotlin-runtime.jar" HelloKt,它也起作用了:

[xxxxxxx@uss lib]$ java -cp ".:kotlin-runtime.jar" HelloKt
hello

但是,对于更复杂的源文件:

AimToTen.kt:

class AimToTen() {
    fun need(marks: Array<Int>): Int {
        // multiply 10 first
        for (idx: Int in marks.indices) marks[idx] *= 10

        val result: Int = 190 * marks.size - 2 * marks.sum();
        return when {
            result < 0 -> 0
            result % 10 != 0 -> result / 10 + 1
            else -> result / 10;
        }
    }
}

我尝试执行java -jar kotlin-compiler.jar AimToTen.kt,但有些功能丢失(?):

[xxxxxxx@uss intro1]$ java -jar kotlin-compiler.jar AimToTen.kt
AimToTen.kt:4:32: error: unresolved reference: indices
        for (idx: Int in marks.indices) marks[idx] *= 10
                               ^
AimToTen.kt:10:56: error: unresolved reference: sum
        val result: Int = 190 * marks.size - 2 * marks.sum();
                                                       ^

于是我又试了一次:

[xxxxxxx@uss intro1]$ java -jar kotlin-compiler.jar
Welcome to Kotlin version 1.0.3 (JRE 1.8.0_65-b17)
Type :help for help, :quit for quit
>>> println(123)
error: unresolved reference: println
println(123)
^

>>> var test: IntArray = intArrayOf(1, 2)
>>> test
[I@7d64e326
>>>

另外,在其他文件夹中,即使我将所有.jar文件复制到同一文件夹中,Hello.kt也无法编译。


嗯,如果您能帮助我解决这个问题,我将不胜感激!我想用java 命令编译这个文件,没有任何绝对路径。

附注使用kotlinc AimToTen.kt 有效。

【问题讨论】:

  • 您在某处缺少kotlin-stdlib。尝试将其添加到编译器选项
  • @voddan 这就是我的想法,但是如何添加呢?您提到的stdlib 似乎是kotlin-runtime.jar,我已经尝试过:java -cp kotlin-runtime.jar -jar kotlin-compiler.jar AimToTen.ktjava -cp ".:kotlin-runtime.jar" -jar kotlin-compiler.jar AimToTen.kt 导致失败。感谢您的回答!

标签: java jvm kotlin jetbrains-ide


【解决方案1】:

docs 中所述,编译 Kotlin 文件的行是

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

顺便说一句,如果你想在命令行中学习/试用 Kotlin(你不应该这样做!),你可以考虑 http://try.kotlinlang.org/

【讨论】:

  • 谢谢,scalaclojure 都可以通过java 命令编译。所以我认为Kotlin 也应该如此。此外,kotlinc 是一个 bash 文件,它使用的命令实际上是 java xxxxxxxxx
  • @MewX 使用脚本。这就是它的用途。
  • @EJP 谢谢,但为什么脚本需要安装路径?我想知道编译过程中需要哪些文件。
猜你喜欢
  • 1970-01-01
  • 2020-08-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-12
  • 2015-06-02
  • 1970-01-01
相关资源
最近更新 更多