avelino / avelino/jbundle

CDS failure for swing/awt application

Open
#46 2 comments 0 reactions 0 assignees View on GitHub
area/pack lang/kotlin
Dominant language
Rust
Stars
181
Forks
11
PR merge metrics
No merged PRs in 30d

Description

I do have a Kotlin compose app and could able to successfully build the bundle, but fails at runtime

```
$ jbundle build -i compose-jvm-executable.jar --java-version 25

$ dist/app
(_) |__ _ _ _ __ __| | | ___
| | '_ \| | | | '_ \ / _` | |/ _ \
| | |_) | |_| | | | | (_| | | __/
_/ |_.__/ \__,_|_| |_|\__,_|_|\___|
|__/
Extracting runtime (first run)...
[0.334s][warning][cds] -XX:ArchiveClassesAtExit is unsupported when base CDS archive is not loaded. Run with -Xlog:cds for more info.
Exception in thread "main" java.lang.reflect.InvocationTargetException
at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(Unknown Source)
at java.base/java.lang.reflect.Method.invoke(Unknown Source)
at org.springframework.boot.loader.launch.Launcher.launch(Launcher.java:102)
at org.springframework.boot.loader.launch.Launcher.launch(Launcher.java:64)
at org.springframework.boot.loader.launch.JarLauncher.main(JarLauncher.java:40)
Caused by: java.lang.NoClassDefFoundError: javax/swing/SwingUtilities
at org.jetbrains.skiko.SwingDispatcher.dispatch(MainUIDispatcher.awt.kt:32)
at kotlinx.coroutines.internal.DispatchedContinuationKt.safeDispatch(DispatchedContinuation.kt:254)
at kotlinx.coroutines.internal.DispatchedContinuationKt.resumeCancellableWith(DispatchedContinuation.kt:318)
at kotlinx.coroutines.intrinsics.CancellableKt.startCoroutineCancellable(Cancellable.kt:26)
at kotlinx.coroutines.BuildersKt__Builders_commonKt.withContext(Builders.common.kt:170)
at kotlinx.coroutines.BuildersKt.withContext(Unknown Source)
at androidx.compose.ui.window.Application_desktopKt.awaitApplication(Application.desktop.kt:198)
at androidx.compose.ui.window.Application_desktopKt$application$1.invokeSuspend(Application.desktop.kt:114)
at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:34)
at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:100)
at kotlinx.coroutines.EventLoopImplBase.processNextEvent(EventLoop.common.kt:263)
at kotlinx.coroutines.BlockingCoroutine.joinBlocking(Builders.kt:94)
at kotlinx.coroutines.BuildersKt__BuildersKt.runBlocking(Builders.kt:70)
at kotlinx.coroutines.BuildersKt.runBlocking(Unknown Source)
at kotlinx.coroutines.BuildersKt__BuildersKt.runBlocking$default(Builders.kt:48)
at kotlinx.coroutines.BuildersKt.runBlocking$default(Unknown Source)
at androidx.compose.ui.window.Application_desktopKt.application(Application.desktop.kt:113)
at androidx.compose.ui.window.Window_desktopKt.singleWindowApplication(Window.desktop.kt:405)
at androidx.compose.ui.window.Window_desktopKt.singleWindowApplication$default(Window.desktop.kt:390)
at MainKt.main(Main.kt:31)
at MainKt.main(Main.kt)
... 5 more
Caused by: java.lang.ClassNotFoundException: javax.swing.SwingUtilities
at java.base/java.net.URLClassLoader.findClass(Unknown Source)
at java.base/java.lang.ClassLoader.loadClass(Unknown Source)
at org.springframework.boot.loader.net.protocol.jar.JarUrlClassLoader.loadClass(JarUrlClassLoader.java:107)
at org.springframework.boot.loader.launch.LaunchedClassLoader.loadClass(LaunchedClassLoader.java:91)
at java.base/java.lang.ClassLoader.loadClass(Unknown Source)
... 26 more

```

Even with `--no-appcds`

```
Extracting runtime (first run)...
Exception in thread "main" java.lang.reflect.InvocationTargetException
at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(Unknown Source)
at java.base/java.lang.reflect.Method.invoke(Unknown Source)
at org.springframework.boot.loader.launch.Launcher.launch(Launcher.java:102)
at org.springframework.boot.loader.launch.Launcher.launch(Launcher.java:64)
at org.springframework.boot.loader.launch.JarLauncher.main(JarLauncher.java:40)
Caused by: java.lang.NoClassDefFoundError: javax/swing/SwingUtilities
at org.jetbrains.skiko.SwingDispatcher.dispatch(MainUIDispatcher.awt.kt:32)
at kotlinx.coroutines.internal.DispatchedContinuationKt.safeDispatch(DispatchedContinuation.kt:254)
at kotlinx.coroutines.internal.DispatchedContinuationKt.resumeCancellableWith(DispatchedContinuation.kt:318)
at kotlinx.coroutines.intrinsics.CancellableKt.startCoroutineCancellable(Cancellable.kt:26)
at kotlinx.coroutines.BuildersKt__Builders_commonKt.withContext(Builders.common.kt:170)
at kotlinx.coroutines.BuildersKt.withContext(Unknown Source)
at androidx.compose.ui.window.Application_desktopKt.awaitApplication(Application.desktop.kt:198)
at androidx.compose.ui.window.Application_desktopKt$application$1.invokeSuspend(Application.desktop.kt:114)
at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:34)
at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:100)
at kotlinx.coroutines.EventLoopImplBase.processNextEvent(EventLoop.common.kt:263)
at kotlinx.coroutines.BlockingCoroutine.joinBlocking(Builders.kt:94)
at kotlinx.coroutines.BuildersKt__BuildersKt.runBlocking(Builders.kt:70)
at kotlinx.coroutines.BuildersKt.runBlocking(Unknown Source)
at kotlinx.coroutines.BuildersKt__BuildersKt.runBlocking$default(Builders.kt:48)
at kotlinx.coroutines.BuildersKt.runBlocking$default(Unknown Source)
at androidx.compose.ui.window.Application_desktopKt.application(Application.desktop.kt:113)
at androidx.compose.ui.window.Window_desktopKt.singleWindowApplication(Window.desktop.kt:405)
at androidx.compose.ui.window.Window_desktopKt.singleWindowApplication$default(Window.desktop.kt:390)
at MainKt.main(Main.kt:31)
at MainKt.main(Main.kt)
... 5 more
Caused by: java.lang.ClassNotFoundException: javax.swing.SwingUtilities
at java.base/java.net.URLClassLoader.findClass(Unknown Source)
at java.base/java.lang.ClassLoader.loadClass(Unknown Source)
at org.springframework.boot.loader.net.protocol.jar.JarUrlClassLoader.loadClass(JarUrlClassLoader.java:107)
at org.springframework.boot.loader.launch.LaunchedClassLoader.loadClass(LaunchedClassLoader.java:91)
at java.base/java.lang.ClassLoader.loadClass(Unknown Source)
```

Contributor guide

Open the contributing guide

Research direction

Reproduce the failure with `jbundle build -i compose-jvm-executable.jar --java-version 25`, then compare it with `--no-appcds`; the stack trace reaches `Main.kt:31` and fails while loading `javax/swing/SwingUtilities`. Trace how the bundled runtime selects required Java modules, and consider the issue done when the Compose Swing/AWT application launches in both reported modes.

Written by the indexing model from the issue text.

Assessment

Tech stack
java, kotlin
Domain
build-system, desktop-dev
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
35/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.