错误:无法找到或加载主类Hello.class

时间:2017-10-27 14:39:28

标签: compilation jvm runtime-error kotlin command-line-interface

尝试最简单的kotlin hello world:

thufir@dur:~/kotlin$ 
thufir@dur:~/kotlin$ ll
total 32
drwxr-xr-x  2 thufir thufir  4096 Oct 27 07:28 ./
drwx------ 46 thufir thufir 16384 Oct 27 06:47 ../
-rw-r--r--  1 thufir thufir   104 Oct 27 07:27 Hello.kt
thufir@dur:~/kotlin$ 
thufir@dur:~/kotlin$ kotlinc Hello.kt 
WARNING: An illegal reflective access operation has occurred
WARNING: Illegal reflective access by com.intellij.util.text.StringFactory to constructor java.lang.String(char[],boolean)
WARNING: Please consider reporting this to the maintainers of com.intellij.util.text.StringFactory
WARNING: Use --illegal-access=warn to enable warnings of further illegal reflective access operations
WARNING: All illegal access operations will be denied in a future release
thufir@dur:~/kotlin$ 
thufir@dur:~/kotlin$ kotlin Hello.class 
error: could not find or load main class Hello.class
thufir@dur:~/kotlin$ 
thufir@dur:~/kotlin$ cat Hello.kt 
class Hello {



    fun main(args: Array<String>) {
        println("Hello, world!" + args[0])
    }
}
thufir@dur:~/kotlin$ 
thufir@dur:~/kotlin$ kotlinc -version
info: kotlinc-jvm 1.1.51 (JRE 9.0.0.15+181)
thufir@dur:~/kotlin$ 

如何从CLI运行它?

期望的输出:

thufir@dur:~/kotlin$ 
thufir@dur:~/kotlin$ kotlinc
Welcome to Kotlin version 1.1.51 (JRE 9.0.0.15+181)
Type :help for help, :quit for quit
>>> 
>>> println("hello world");
WARNING: An illegal reflective access operation has occurred
WARNING: Illegal reflective access by com.intellij.util.text.StringFactory to constructor java.lang.String(char[],boolean)
WARNING: Please consider reporting this to the maintainers of com.intellij.util.text.StringFactory
WARNING: Use --illegal-access=warn to enable warnings of further illegal reflective access operations
WARNING: All illegal access operations will be denied in a future release
hello world
>>> 
>>> :quit
thufir@dur:~/kotlin$ 

1 个答案:

答案 0 :(得分:3)

首先,Hello可能无法正常工作,因为main函数不是静态的。在Kotlin中,您不需要一个类来定义main方法。只需使用功能:

fun main(args: Array<String>) {
    println("Hello, world!" + args[0])
}

然后,在编译之后,你不应该像kotlin <File>.class那样称呼它,而只是kotlin <File>.class后缀是多余的:

$ ./compiler/kotlinc/bin/kotlin HelloKt test
Hello, world!test