I'm at my wits end with this one. I'm trying to learn how to create a web app right now and am using Kotlin, Ktor, React and MongoDb. I am trying to create a data class and give one of the attributes a @BsonId Annotation, but Intellij just cant find the dependency for it somehow? It finds it in the jvmMain module, but not in the jsMain or commonMain module. It also cant find other stuff regarding mongodb in these modules. Can anyone tell me why? I tried a lot of different gradle imports.
My gradle file:
import org.jetbrains.kotlin.gradle.targets.js.webpack.KotlinWebpack
val kotlinVersion = "1.9.10"
val serializationVersion = "1.6.0"
val ktorVersion = "2.3.3"
val logbackVersion = "1.2.11"
val kotlinWrappersVersion = "1.0.0-pre.621"
val mongodbVersion = "4.11.0"
plugins {
kotlin("multiplatform") version "1.9.20"
application
kotlin("plugin.serialization") version "1.9.20"
}
group = "org.example"
version = "1.0-SNAPSHOT"
repositories {
// Hier werden die Libraries gezogen
mavenCentral()
}
dependencies {
implementation("org.mongodb:mongodb-driver-kotlin-coroutine:$mongodbVersion")
}
kotlin {
jvm {
withJava()
}
js {
browser {
binaries.executable()
}
}
sourceSets {
val commonMain by getting {
dependencies {
implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:$serializationVersion")
implementation("io.ktor:ktor-client-core:$ktorVersion")
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.3")
implementation("org.mongodb:bson:$mongodbVersion")
}
}
val jvmMain by getting {
dependencies {
implementation("io.ktor:ktor-serialization:$ktorVersion")
implementation("io.ktor:ktor-server-content-negotiation:$ktorVersion")
implementation("io.ktor:ktor-serialization-kotlinx-json:$ktorVersion")
implementation("io.ktor:ktor-server-cors:$ktorVersion")
implementation("io.ktor:ktor-server-compression:$ktorVersion")
implementation("io.ktor:ktor-server-core-jvm:$ktorVersion")
implementation("io.ktor:ktor-server-netty:$ktorVersion")
implementation("ch.qos.logback:logback-classic:$logbackVersion")
}
}
val jsMain by getting {
dependencies {
implementation("io.ktor:ktor-client-js:$ktorVersion")
implementation("io.ktor:ktor-client-content-negotiation:$ktorVersion")
implementation("io.ktor:ktor-serialization-kotlinx-json:$ktorVersion")
implementation(project.dependencies.enforcedPlatform("org.jetbrains.kotlin-wrappers:kotlin-wrappers-bom:$kotlinWrappersVersion"))
implementation("org.jetbrains.kotlin-wrappers:kotlin-react")
implementation("org.jetbrains.kotlin-wrappers:kotlin-react-dom")
}
}
val commonTest by getting {
dependencies {
implementation(kotlin("test-common"))
implementation(kotlin("test-annotations-common"))
}
}
}
}
application {
mainClass.set("ServerKt")
}
// include JS artifacts in any JAR we generate
tasks.named<Jar>("jvmJar").configure {
val taskName = if (project.hasProperty("isProduction")
|| project.gradle.startParameter.taskNames.contains("installDist")
) {
"jsBrowserProductionWebpack"
} else {
"jsBrowserDevelopmentWebpack"
}
val webpackTask = tasks.named<KotlinWebpack>(taskName)
dependsOn(webpackTask)
from(webpackTask.map { it.mainOutputFile.get().asFile }) // bring output file along into the JAR
into("static")
}
tasks {
withType<org.jetbrains.kotlin.gradle.tasks.KotlinCompile>().configureEach {
kotlinOptions {
jvmTarget = "1.8"
}
}
}
distributions {
main {
contents {
from("$buildDir/libs") {
rename("${rootProject.name}-jvm", rootProject.name)
into("lib")
}
}
}
}
// Alias "installDist" as "stage" (for cloud providers)
tasks.register("stage") {
dependsOn(tasks.named("installDist"))
}
tasks.named<JavaExec>("run").configure {
classpath(tasks.named<Jar>("jvmJar")) // so that the JS artifacts generated by `jvmJar` can be found and served
}
My data class:
My project structure: