【发布时间】: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.kt和java -cp ".:kotlin-runtime.jar" -jar kotlin-compiler.jar AimToTen.kt导致失败。感谢您的回答!
标签: java jvm kotlin jetbrains-ide