【问题标题】:Heroku / Kotlin: java.lang.NoClassDefFoundError: kotlin/jvm/internal/IntrinsicsHeroku / Kotlin:java.lang.NoClassDefFoundError:kotlin/jvm/internal/Intrinsics
【发布时间】:2018-09-03 09:58:36
【问题描述】:

我尝试通过heroku run bash 运行 kotlin spring webapp。然后我运行:

java -cp ./build/libs/pss_kotlin-1.0-SNAPSHOT.jar pl.makzyt.pss_kotlin.MainKt

然后我得到这个错误:

Exception in thread "main" java.lang.NoClassDefFoundError: kotlin/jvm/internal/Intrinsics
        at pl.makzyt.pss_kotlin.MainKt.main(Main.kt)
Caused by: java.lang.ClassNotFoundException: kotlin.jvm.internal.Intrinsics
        at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:338)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
        ... 1 more

如果我得到 kotlin-runtime.jar,我知道我可以运行它。是否有可能通过一些命令获得它还是应该手动下载它?

编辑

这是我的 build.gradle 依赖项:

dependencies {
    compile "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version"
    compile "org.jetbrains.kotlin:kotlin-reflect:$kotlin_version"

    compile group: 'org.springframework.boot',
            name: 'spring-boot-autoconfigure',
            version: '2.0.0.RELEASE'

    compile group: 'org.springframework.boot',
            name: 'spring-boot-starter-data-jpa',
            version: '2.0.0.RELEASE'

    compile group: 'org.springframework.boot',
            name: 'spring-boot-starter-web',
            version: '2.0.0.RELEASE'

    compile group: 'org.postgresql',
            name: 'postgresql',
            version: '42.2.2'

    compile group: 'org.hibernate',
            name: 'hibernate-core',
            version: '5.2.12.Final'

    compile group: 'org.hibernate',
            name: 'hibernate-entitymanager',
            version: '5.2.12.Final'

    compile group: 'javax.xml.bind',
            name: 'jaxb-api',
            version: '2.1'

    compile group: 'org.springframework.boot',
            name: 'spring-boot-starter-thymeleaf',
            version: '2.0.0.RELEASE'

    compile group: 'nz.net.ultraq.thymeleaf',
            name: 'thymeleaf-layout-dialect',
            version: '2.3.0'
}

【问题讨论】:

  • 你可能想使用影子罐子

标签: java spring heroku kotlin jvm


【解决方案1】:

如果你的 spring boot 应用配置正确(spring boot 插件在 build.gradle 中应用)你只需要运行 jar。

java -jar yourjar.jar

您不需要使用-cp 选项,因为 Spring Boot 会重新打包 jar 中的所有依赖项,这就是您收到 class not found 错误的原因。

【讨论】:

    【解决方案2】:

    我不确定您为什么会收到此错误。但是您可能想尝试从 https://start.spring.io 生成一个新的 Spring + Kotlin 应用程序并将 Maven 依赖项/插件复制到您的 pom.xml 中。

    【讨论】:

    • 感谢您的回答。我使用 Gradle 并且有类似的依赖项(我编辑了问题),所以我仍然不知道可能出了什么问题。不过,您的代码部署良好。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-20
    • 1970-01-01
    • 1970-01-01
    • 2018-12-15
    • 2017-10-12
    • 2013-03-11
    相关资源
    最近更新 更多