I created an application with Kotlin Multiplatform, for desktop (only).
The application works great when I do ./gradlew run
but fails when I do ./gradlew runDistributable
giving:
Exception in thread "main" java.lang.NoClassDefFoundError: com/sun/net/httpserver/HttpHandler
at com.google.api.client.extensions.jetty.auth.oauth2.LocalServerReceiver$Builder.build(LocalServerReceiver.java:222)
at GPhotoClientProvider.getUserCredentials(GPhotoClientProvider.kt:106)
at GPhotoClientProvider.createClient(GPhotoClientProvider.kt:46)
at SlideshowService.<clinit>(SlideshowService.kt:10)
and in my build.gradle.kts
I have:
import org.jetbrains.compose.desktop.application.dsl.TargetFormat
plugins {
kotlin("multiplatform").version("1.8.0")
id("org.jetbrains.compose")
}
group = "org.myapp"
version = "1.0-SNAPSHOT"
repositories {
google()
mavenCentral()
maven("https://maven.pkg.jetbrains.space/public/p/compose/dev")
}
kotlin {
jvm {
jvmToolchain(11)
withJava()
}
sourceSets {
val ktorVersion = "2.3.1"
val jvmMain by getting {
dependencies {
implementation(compose.desktop.currentOs)
implementation("org.slf4j:slf4j-simple:1.7.36")
implementation("com.google.oauth-client:google-oauth-client:1.34.1")
implementation("com.google.oauth-client:google-oauth-client-java6:1.34.1")
implementation("com.google.oauth-client:google-oauth-client-jetty:1.34.1")
implementation("com.google.api-client:google-api-client:2.2.0")
implementation("com.google.photos.library:google-photos-library-client:1.7.3")
implementation("io.ktor:ktor-client-java:$ktorVersion")
implementation("io.ktor:ktor-client-cio:$ktorVersion")
implementation("io.ktor:ktor-client-logging:$ktorVersion")
implementation("io.github.g0dkar:qrcode-kotlin-jvm:3.3.0")
}
}
val jvmTest by getting
}
}
compose.desktop {
application {
mainClass = "MainKt"
nativeDistributions {
targetFormats(TargetFormat.Dmg, TargetFormat.Msi, TargetFormat.Deb)
packageName = "myApp"
packageVersion = "1.0.0"
}
}
}
On Google website for client API I just found the Maven instructions, which I tried to follow. I'm not very familiar with Gradle or Kotlin Multiplatform, and the documentation for desktop is not so great.