gradle nativeBinaries не может удовлетворить зависимости - PullRequest
0 голосов
/ 14 апреля 2020

Итак, я хотел создать собственный двоичный файл Kotlin для своего приложения. Я придумал этот build.gradle.kts:

plugins {
    application
    kotlin("multiplatform") version "1.3.70"
}

version = "1.0.2"
group = "org.gradle.sample"

repositories {
    mavenCentral()
}

kotlin {
    linuxX64("native") {
      binaries {
        executable()
      }
    }
  }

dependencies {
    implementation(kotlin("stdlib"))
    implementation("io.javalin:javalin:3.8.0")
}

Сам код прост:

package org.gradle.sample

import io.javalin.Javalin

fun main() {
    val app = Javalin.create().start(7000)
    app.get("/") { ctx -> ctx.result("Hello World") }
}

Проблема здесь в том, что он не работает при компиляции, как, например, зависимости не были удовлетворены:

> Task :compileKotlinNative FAILED
Caching disabled for task ':compileKotlinNative' because:
  Build cache is disabled
Task ':compileKotlinNative' is not up-to-date because:
  Task has failed previously.
file or directory '/home/keddad/Documents/samplekotlinapi/src/commonMain/kotlin', not found
file or directory '/home/keddad/Documents/samplekotlinapi/src/commonMain/kotlin', not found
Run tool: konanc with args: -g -ea -target linux_x64 -p library -o /home/keddad/Documents/samplekotlinapi/build/classes/kotlin/native/main/basic-api.klib -Xmulti-platform -no-endorsed-libs /home/keddad/Documents/samplekotlinapi/src/nativeMain/kotlin/org/gradle/sample/Main.kt
e: /home/keddad/Documents/samplekotlinapi/src/nativeMain/kotlin/org/gradle/sample/Main.kt: (3, 8): Unresolved reference: io
e: /home/keddad/Documents/samplekotlinapi/src/nativeMain/kotlin/org/gradle/sample/Main.kt: (6, 15): Unresolved reference: Javalin
e: /home/keddad/Documents/samplekotlinapi/src/nativeMain/kotlin/org/gradle/sample/Main.kt: (7, 20): Cannot infer a type for this parameter. Please specify it explicitly.
:compileKotlinNative (Thread[Execution worker for ':',5,main]) completed. Took 0.201 secs.

FAILURE: Build failed with an exception.

То же самое работало при компиляции для JVM, но для Native это ломалось. Что я делаю не так?

1 Ответ

1 голос
/ 15 апреля 2020

К сожалению, вы не сможете скомпилировать этот код в данный момент. Кажется, что фреймворк Javalin не предназначен для Kotlin / Native, он публикуется только для Kotlin / JVM. Только библиотеки, опубликованные с учетом K / N, будут доступны для использования.
На самом деле, проблема в том, что Kotlin ароматы не эквивалентны внутри. Они могут делиться чистым Kotlin кодом через common... исходные наборы, но нельзя взять проект Kotlin / JVM и просто изменить цель. Kotlin / Native отличается от Kotlin / JVM, оба они не совпадают с Kotlin / JS. Чтобы заставить их работать вместе, рекомендуется подход с именем Kotlin / Multiplatform, см. эту статью.
Если вы заинтересованы в том, чтобы этот код стал мультиплатформенным, рассмотрите вариант Ktor . Он обеспечивает поддержку Kotlin / Native, и вы сможете частично обмениваться кодом между платформами.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...