java - 如何使用带 `java`的with `kotlin-compiler.jar`命令编译Kotlin源代码?

标签 java jvm kotlin jetbrains-ide

我现在只能使用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 有效。

最佳答案

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

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

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

关于java - 如何使用带 `java`的with `kotlin-compiler.jar`命令编译Kotlin源代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39191785/

相关文章:

java - Hibernate:session.load 与 session.get

java - 为什么HBase使用NavigableMap<Cell, Cell>来存储Cell?

kotlin - IntelliJ具有ThymeLeaf,Kotlin,ModelAndView和mapOf的自动完成功能?

java - Java 中的地理围栏库

Java字符串和正则表达式匹配

java - 调整面板大小而不重新验证

android - Detox - DetoxManager 在运行时找不到 kotlin/jvm/functions/Function1

java - Java 会注意到循环何时不会改变任何内容,或者我应该使用break 语句吗?

Android 房间 rawquery 问题

java - 如何在 Android 应用程序中下载功能模块?