gradle nativeBinaries 无法满足依赖关系
gradle nativeBinaries fails to satisfy dependencies
所以,我想为我的应用程序生成本机 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 它中断了。我做错了什么?
很遗憾,您目前无法编译此代码。 Javalin
框架似乎没有针对 Kotlin/Native,它只针对 Kotlin/JVM 发布。唯一以 K/N 为目标发布的库将可供使用。
事实上,问题在于 Kotlin 风格在内部并不等同。他们可以通过 common...
源代码集共享纯 Kotlin 代码,但不能在 Kotlin/JVM 项目中只更改目标。 Kotlin/Native与Kotlin/JVM不同,两者又不等同于Kotlin/JS。为了使它们协同工作,推荐使用名为 Kotlin/Multiplatform 的方法,请参阅 this 文章。
如果您有兴趣将此代码改编为多平台,请考虑查看 Ktor。它提供对 Kotlin/Native 的支持,您将能够在平台之间共享部分代码。
所以,我想为我的应用程序生成本机 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 它中断了。我做错了什么?
很遗憾,您目前无法编译此代码。 Javalin
框架似乎没有针对 Kotlin/Native,它只针对 Kotlin/JVM 发布。唯一以 K/N 为目标发布的库将可供使用。
事实上,问题在于 Kotlin 风格在内部并不等同。他们可以通过 common...
源代码集共享纯 Kotlin 代码,但不能在 Kotlin/JVM 项目中只更改目标。 Kotlin/Native与Kotlin/JVM不同,两者又不等同于Kotlin/JS。为了使它们协同工作,推荐使用名为 Kotlin/Multiplatform 的方法,请参阅 this 文章。
如果您有兴趣将此代码改编为多平台,请考虑查看 Ktor。它提供对 Kotlin/Native 的支持,您将能够在平台之间共享部分代码。