Kotlin程序如何打包jar文件或编译到二进制可执行文件?


#1

请问在有依赖的情况下如何用Kotlin打包成一个jar文件或直接编译到二进制可执行文件?
事情是这样的:我想写一个密码生成器(随机字符串生成器),在IDE中用Gradle导入了implementation("org.apache.commons", "commons-lang3", "3.10")的依赖,写了如下程序:

import org.apache.commons.lang3.RandomStringUtils.randomAscii
fun main() {
    while (true) {
        println("请输入随机生成字符串的位数:")
        readLine()!!.run { randomAscii(toInt()) }.let(::println)
    }
}

然后我把依赖的jarkt文件放在同一目录下,执行:

kotlinc passwdGenerator.kt -cp commons-lang3-3.10.jar -include-runtime -d pg.jar

编译通过,但运行时(我输入数字后)报错:

Exception in thread "main" java.lang.NoClassDefFoundError: org.apache.commons.lang3.RandomStringUtils

找不到类应该在编译时就不通过,为什么我会在运行时得到这个报错?我应该如何解决此问题?
如果要更进一步,直接在IDE中编译成native,需要怎么做?


#2

也许你可以谷歌kotlin fat jar来查找问题解决方案


#3

用 gradle 的 application 插件


#4

似乎这是一个关于 Gradle 而并非 Kotlin 的问题,请搜索 Gradle Shadow 插件


京ICP备16022265号-2 Kotlin China 2017 - 2018