【问题标题】:My output .jar gives an java.lang.NoClassDefFoundError: kotlin/jvm/internal/Intrinsics我的输出 .jar 给出了 java.lang.NoClassDefFoundError: kotlin/jvm/internal/Intrinsics
【发布时间】:2019-07-06 03:19:39
【问题描述】:

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

但是,我尝试了 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]

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

【问题讨论】:

标签: intellij-idea kotlin meta-inf


【解决方案1】:

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

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

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

plugins {
    ...
    id "application"
}

this question 的答案中给出了其他一些创建胖 jar 的方法(正如 Andreas 建议的那样),kotlin examples repository 有几个使用application 插件的项目。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-05-20
    • 1970-01-01
    • 2018-09-03
    • 2021-04-16
    • 1970-01-01
    • 1970-01-01
    • 2017-10-12
    • 1970-01-01
    相关资源
    最近更新 更多