0

该项目可以在 Intellij Idea IDE 中使用 'Run' -> 'Run\'[PACKAGE.NAME].MainKt\'' 运行。

但是,我已经尝试了 Stack Overflow 的几种方法,问题仍然存在,并且我构建了 jar 文件,并且在运行输出 jar 文件 jar -jar [JarFilePathInMyComputer].JarFile.jar 时,它抛出了一个异常,如下所示

 Exception in thread "main" java.lang.NoClassDefFoundError: kotlin/jvm/internal/Intrinsics
        at [PACKAGENAME].MainKt.main(Main.kt)
Caused by: java.lang.ClassNotFoundException: kotlin.jvm.internal.Intrinsics
        at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:582)
        at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:190)
        at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:499)
        ... 1 more

我的依赖是

dependencies {
    implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8"
    implementation 'org.jetbrains.kotlin:kotlin-runtime:1.2.71'
    implementation "com.google.code.gson:gson:2.8.5"
    implementation 'org.apache.httpcomponents:httpclient:4.5.9'
    testCompile group: 'junit', name: 'junit', version: '4.12'
}

当我添加工件时,OutPut 布局包含以下 kotlin 库

Gradle: commons-code:commons-codec:1.11
Gradle: org.jetbrains.kotlin-stdlib-jdk8-1.3.21
Gradle: org.jetbrains.annaotations:13.0
Gradle: juniy.junit:4.12
Gradle: org.jetbrains.kotlin:kotlin-stdlib:1.3.21
Gradle: org.jetbrains.kotlin-runtime:1.2.71
Gradle: org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.3.21
Gradle: org.jetbrains.kotlin:kotlin-stdlib-common:1.3.21

我的 MANIFEST.MF 我们

Manifest-Version: 1.0
Main-Class: [PACKAGE.NAME].MainKt
Class-Path: [PACKAGE.NAME]

我该如何解决?我尝试了几种方法,但仍然抛出相同的异常。

4

1 回答 1

0

您需要在调用 java 时将 kotlin 运行时添加到类路径中,或者您需要构建一个胖 jar 文件,将运行时打包到您的 jar 文件中。就个人而言,我最喜欢使用shadow插件的 fat jar 选项。

plugins {
    ...
    id "com.github.johnrengelman.shadow"
}

或者您可以使用该application插件,该插件创建一个可部署的包,其中包含管理类路径的 Windows 和 unix 启动脚本。

plugins {
    ...
    id "application"
}

在这个问题的答案中给出了一些其他创建胖 jar 的方法(正如 Andreas 建议的那样),并且kotlin 示例存储库有几个使用该application插件的项目。

于 2019-07-07T16:23:01.587 回答