#kotlin #gradle #kotlin-multiplatform #gradle-multi-project-build
Вопрос:
Я использую Kotlin для обмена логикой между моей серверной частью (Java Spring Web) и передней частью. Заставить серверную часть Java вызывать логику Kotlin легко: я сделал обе части одной и той же сборки мультипроекта Gradle, и проект сервера зависит от проекта Kotlin.
Теперь мне нужно вывести сгенерированный JavaScript из Kotlin в формат, в котором сервер может его обслуживать. Просматривая банку вывода Gradle для сервера, он содержит только банку jvm, а не банку js.
Ответ №1:
У меня была аналогичная проблема в этом проекте GitHub с бэкэндом Spring Boot и интерфейсом Kotlin/JS общий код.
Если все находится в одном и том же репозитории в нескольких подпроектах Gradle, вы можете использовать следующее в подпроекте сервера, чтобы объединить созданные JS в качестве ресурсов в jar вашего сервера:
tasks.processResources {
// make sure we build the frontend before creating the jar
dependsOn(":frontend:assemble")
// package the frontend app within the jar as static
val frontendBuildDir = project(":frontend").buildDir
val frontendDist = frontendBuildDir.toPath().resolve("distributions")
from(frontendDist) {
include("**/*")
into("static")
}
}
Это не идеально (мне не нравятся подобные зависимости между проектами), но это делает свою работу.
Затем Spring Boot автоматически обслуживает статические файлы из этого места в jar ( /static
).
Комментарии:
1. Также пришлось удалить
kotlin.js.generate.executable.default=false
из моей мультиплатформенной сборки Kotlin. Не знаю, почему мастер проекта поместил его туда.