【问题标题】:java.lang.NoClassDefFoundError: kotlin/jvm/internal/Intrinsics in Spring Boot Appjava.lang.NoClassDefFoundError: kotlin/jvm/internal/Intrinsics in Spring Boot App
【发布时间】:2020-05-20 09:32:09
【问题描述】:

我确实有一个带有 kotlin.gradle 的 Kotlin Spring Boot 应用程序

dependencies {
    implementation(kotlin("stdlib-jdk8"))
    implementation("org.jetbrains.kotlin:kotlin-stdlib:$kotlinVersion")
    implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlinVersion")

所以 stdlib 包含在项目中。

在我的胖罐子里,我也可以在 BOOT-INF/lib 路径下看到 lib

但不知何故当我java -jar app.jar

我得到:

Exception in thread "main" java.lang.reflect.InvocationTargetException
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
        at java.lang.reflect.Method.invoke(Unknown Source)
        at org.springframework.boot.loader.MainMethodRunner.run(MainMethodRunner.java:48)
        at org.springframework.boot.loader.Launcher.launch(Launcher.java:87)
        at org.springframework.boot.loader.Launcher.launch(Launcher.java:51)
        at org.springframework.boot.loader.JarLauncher.main(JarLauncher.java:52)
Caused by: java.lang.NoClassDefFoundError: kotlin/jvm/internal/Intrinsics
        at dev.nsud.ApplicationKt.main(Application.kt)
        ... 8 more
Caused by: java.lang.ClassNotFoundException: kotlin.jvm.internal.Intrinsics
        at java.net.URLClassLoader.findClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        ... 9 more

不知何故,这在 Intellij IDEA 中完美运行。

【问题讨论】:

    标签: java spring spring-boot kotlin


    【解决方案1】:

    如果你想创建一个胖 jar,你必须向你的 build.gradle 添加清单属性,它应该看起来像这样,

    jar {
        manifest {
            attributes 'Main-Class': 'com.your.main.class.Name'
        }
    
        from {
            configurations.runtimeClasspath.collect { it.isDirectory() ? it : zipTree(it) }
        }
    }
    

    如果您已经有了清单属性,我认为问题在于您定义 from 的方式,因为它需要是 configurations.runtimeClasspath 而不是 configurations.compile

    注意:如果我能看到您的完整 build.gradle 以进一步了解问题,那就太好了

    【讨论】:

    • 如何在 kotlin DSL 上做到这一点?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-03
    • 1970-01-01
    • 2021-04-16
    • 1970-01-01
    • 1970-01-01
    • 2018-12-15
    相关资源
    最近更新 更多