У меня есть многомодульный проект. Один модуль - это приложение android, а другой - сервер с весенней загрузкой, который я пытаюсь запустить на Heroku. Сначала я установил приложение android, а затем добавил модуль Heroku, используя указания на их сайте. Сервер нормально работает локально в IntelliJ (как приложение), но при развертывании в Heroku или при локальном запуске через heroku local web
он аварийно завершает работу при запуске:
Исключение в потоке "main" java. lang.reflect. ) в java .lang.reflect.Method.invoke (Метод. 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.kris toph3r.videocallmyfriends.server.Application.main (Application.kt) ... еще 8 причин: java .lang.ClassNotFoundException: kotlin .jvm.internal.Intrinsics at java. net .URLClassLoader. findClass (URLClassLoader. java: 382) в java .lang.ClassLoader.loadClass (ClassLoader. java: 419) в org.springframework.boot.loader.LaunchedURLClassLoader.loadClass (LaunchedURLClassLoader.) 10 *. at java .lang.ClassLoader.loadClass (ClassLoader. java: 352) ... еще 10
Код сервера (и build.gradle, et c) адаптирован из другое приложение Heroku, которое я написал (клонировано из одного из их примеров проектов и изменено), и это приложение прекрасно работает на Heroku / локально в IntelliJ / локально с использованием heroku local web
. Не уверен, какая дополнительная информация требуется, чтобы понять это. Это мои файлы build.gradle:
Root проект:
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 коду
- Размещение плагинов на уровне проекта root или на уровне модуля сервера
- Добавление всех зависимостей, используемых рабочим проектом, в этот
- Как правило, перемещает вещи Gradle, удаляет вещи, чтобы проверить, не ломается ли сборка, и т.д. c.
- Установка класса запуска as
org.springframework.boot.loader.JarLauncher
Следует отметить, что в моем рабочем проекте не настроена задача «stage», но он собирается и работает нормально, в то время как этот проект отказывается собирать Heroku без задачи этапа. , Однако в документации Heroku говорится, что они вызывают сценическое задание для создания приложения, поэтому я не уверен, имеет ли это значение.