【问题标题】:Heroku app refuses to start up as it cannot load kotlin.jvm.internal.IntrinsicsHeroku 应用程序拒绝启动,因为它无法加载 kotlin.jvm.internal.Intrinsics
【发布时间】:2020-07-03 13:00:30
【问题描述】:

我有一个多模块项目。一个模块是一个 android 应用程序,一个是我试图在 Heroku 上运行的基于 spring-boot 的服务器。我首先设置了 android 应用程序,然后使用他们网站上的说明添加了 Heroku 模块。服务器在 IntelliJ 中本地运行良好(作为应用程序),但是当部署到 Heroku 或通过 heroku local web 在本地运行时,它在启动时崩溃:

线程“main”中的异常 java.lang.reflect.InvocationTargetException 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 在 java.lang.reflect.Method.invoke(Method.java:498) 在 org.springframework.boot.loader.MainMethodRunner.run(MainMethodRunner.java:48) 在 org.springframework.boot.loader.Launcher.launch(Launcher.java:87) 在 org.springframework.boot.loader.Launcher.launch(Launcher.java:50) 在 org.springframework.boot.loader.JarLauncher.main(JarLauncher.java:51) 引起:java.lang.NoClassDefFoundError: kotlin/jvm/internal/Intrinsics 在 com.kristoph3r.videocallmyfriends.server.Application$Companion.main(Application.kt) 在 com.kristoph3r.videocallmyfriends.server.Application.main(Application.kt) ... 8 更多原因:java.lang.ClassNotFoundException: kotlin.jvm.internal.Intrinsics 在 java.net.URLClassLoader.findClass(URLClassLoader.java:382) 在 java.lang.ClassLoader.loadClass(ClassLoader.java:419) 在 org.springframework.boot.loader.LaunchedURLClassLoader.loadClass(LaunchedURLClassLoader.java:94) 在 java.lang.ClassLoader.loadClass(ClassLoader.java:352) ... 10 更多

服务器代码(和 build.gradle 等)改编自我编写的另一个 Heroku 应用程序(从他们的一个示例项目克隆并修改),并且该应用程序在 Heroku/本地在 IntelliJ 中运行良好/本地使用heroku local web。不知道需要什么额外的信息来解决这个问题。这些是我的 build.gradle 文件:

根项目:

buildscript {
    ext.kotlin_version = '1.3.70'
    ext.spring_boot_version = '1.5.3.RELEASE'
    repositories {
        google()
        jcenter()

    }
    dependencies {
        classpath 'com.android.tools.build:gradle:3.5.3'
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
        classpath "org.springframework.boot:spring-boot-gradle-plugin:$spring_boot_version"
    }
}

allprojects {
    repositories {
        google()
        jcenter()

    }
}

task stage(dependsOn: [':server:stage'])

服务器模块:

apply plugin: 'eclipse'
apply plugin: 'idea'
apply plugin: 'kotlin'
apply plugin: 'org.springframework.boot'
apply plugin: 'application'

bootRepackage {
    mainClassName = 'com.kristoph3r.videocallmyfriends.server.Application'
}

dependencies {
    implementation "org.jetbrains.kotlin:kotlin-stdlib"
    implementation 'org.springframework.boot:spring-boot-starter'
    implementation 'org.springframework.boot:spring-boot-starter-web'
    implementation 'org.springframework.boot:spring-boot-starter-actuator'
}

task stage(dependsOn: ['build', 'clean']) {
    group = 'application'
}

build.mustRunAfter clean

jar {
    archiveBaseName = 'server'
    archiveVersion = '1.0'
}

到目前为止我尝试过的事情:

  • 比较两个项目中的 JAR:它们只包含与我的 Kotlin 代码对应的类
  • 将插件置于根项目级别或服务器模块级别
  • 将工作项目使用的所有依赖项添加到这个中
  • 通常移动 gradle 的东西,删除东西以检查构建是否中断,等等。
  • 将启动类设置为org.springframework.boot.loader.JarLauncher

请注意,我的工作项目没有配置“阶段”任务,但构建和运行良好,而这个项目拒绝在没有阶段任务的 Heroku 上构建。但是,Heroku 文档指出它们触发阶段任务来构建应用程序,所以我不确定差异是否重要。

【问题讨论】:

    标签: spring gradle kotlin heroku


    【解决方案1】:

    spring boot 升级和服务器 build.gradle 中的大量更改修复了它(尽管我现有的项目仍然适用于旧的 spring-boot 版本 - 相当神秘!)

    在根项目中,在buildscript里面,我改变了spring boot的版本:

        ext.spring_boot_version = '2.2.5.RELEASE'
    

    在服务器模块中:

    添加了spring依赖管理插件:

    apply plugin: 'io.spring.dependency-management'
    

    添加了一个依赖管理部分:

    dependencyManagement {
        imports {
            mavenBom org.springframework.boot.gradle.plugin.SpringBootPlugin.BOM_COORDINATES
        }
    }
    

    出于某种原因(spring boot 的怪癖?)我不得不添加另一个 Kotlin 依赖项:

        implementation "org.jetbrains.kotlin:kotlin-reflect"
    

    最后不得不用springBoot替换bootRepackage:

    springBoot {
        mainClassName = 'com.krist0ph3r.videocallmyfriends.server.Application'
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-11-20
      • 2017-05-21
      • 2023-03-25
      • 2014-05-02
      • 2019-08-05
      • 2012-08-23
      • 2014-04-11
      • 2016-06-10
      相关资源
      最近更新 更多