官术网_书友最值得收藏!

Kotlin runtime

When we compiled Hello World! and produced the JAR, we instructed the compiler to bundle in the Kotlin runtime. Why is the runtime needed? Take a closer look at the following bytecode that was generated, if you haven't already done so. To be more specific, look at line 3. It invokes a method to validate the fact that the args variable is not null; therefore, if you compile the code without asking for the runtime to be bundled in, and then try to run it, you will get an exception:

$ kotlinc HelloWorld.kt -d HelloWorld.jar
$ java -jar HelloWorld.jar
Exception in thread "main" java.lang.NoClassDefFoundError:  kotlin/jvm/internal/Intrinsics at HelloWorldKt.main(HelloWorld.kt)
Caused by: java.lang.ClassNotFoundException:  kotlin.jvm.internal.Intrinsics

The runtime footprint is very small; at approximately 800 K, you can't argue otherwise. Kotlin comes with its own standard class library (Kotlin runtime), which is different from the Java library. As a result, you need to merge it into the resulting JAR, or provide it in the classpath, as follows:

$ java -cp $KOTLIN_HOME/lib/kotlin-runtime.jar:HelloWorld.jar  HelloWorldKt

If you develop a library for the exclusive use of other Kotlin libraries or applications, then you don't have to include the runtime. Alternatively, there is a shorter path that involves passing a flag to the Kotlin compiler, as follows:

$ kotlinc -include-runtime HelloWorld.kt -d HelloWorld

The preceding code will include the runtime when assembling the final JAR file.

主站蜘蛛池模板: 东阿县| 砀山县| 大名县| 元朗区| 新郑市| 梁河县| 蛟河市| 岱山县| 搜索| 钦州市| 灵丘县| 上栗县| 汉寿县| 阿瓦提县| 株洲县| 台南县| 城固县| 吕梁市| 中超| 县级市| 凤山市| 新邵县| 托克逊县| 嘉荫县| 临朐县| 新和县| 孟州市| 观塘区| 克东县| 淮滨县| 波密县| 如皋市| 东兰县| 湾仔区| 得荣县| 道真| 陇南市| 涿州市| 巨鹿县| 奉节县| 海淀区|