想用 kotlin 写一个程序,用 idea 建了个 gradle 工程。需要读取的文本文件放在了 src/main/resources 文件夹中,文件名 readit.txt 。然后用以下程序读,代码如下:
fun main() {
println(getResourceAsText("readit.txt"))
}
fun getResourceAsText(path: String): String {
return object {}::class.java.getResourceAsStream(path).bufferedReader().readText()
}
使用 idea 直接调用,可用。然后 gradle build 打包成可执行 jar 包,gradle.build 配置文件如下:
plugins {
id 'org.jetbrains.kotlin.jvm' version '1.3.72'
}
group 'org.example'
version '1.0-SNAPSHOT'
repositories {
mavenCentral()
}
dependencies {
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8"
}
compileKotlin {
kotlinOptions.jvmTarget = "1.8"
}
compileTestKotlin {
kotlinOptions.jvmTarget = "1.8"
}
jar {
manifest {
attributes 'Main-Class': 'MainKt'
}
from { configurations.compile.collect { it.isDirectory() ? it : zipTree(it) } }
}
打完 jar 包后,发现 readit.txt 变成在 jar 内根目录下,然后执行程序报错如下:
Exception in thread "main" java.lang.NoClassDefFoundError: kotlin/jvm/internal/Intrinsics
at MainKt.getResourceAsText(main.kt)
at MainKt.main(main.kt:2)
at MainKt.main(main.kt)
Caused by: java.lang.ClassNotFoundException: kotlin.jvm.internal.Intrinsics
at java.net.URLClassLoader.findClass(URLClassLoader.java:382)
at java.lang.ClassLoader.loadClass(ClassLoader.java:418)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:355)
at java.lang.ClassLoader.loadClass(ClassLoader.java:351)
... 3 more
请大家指点,为啥会这样😿感谢大家
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.