Skip to content

build: keep kotlinx-coroutines-test out of the published runtime - #264

Merged
kdroidFilter merged 1 commit into
kdroidFilter:masterfrom
comprido96:build/coroutines-test-scope
Nov 10, 2026
Merged

kdroidFilter merged 1 commit into
kdroidFilter:masterfrom
comprido96:build/coroutines-test-scope

Conversation

@comprido96

Copy link
Copy Markdown

Problem

commonMain declares kotlinx-coroutines-test as an implementation dependency, so every consumer of the library gets the test library on its runtime classpath. No main source uses it.

Fix

Drop it from commonMain. The test source sets (androidUnitTest, jvmTest, iosTest, wasmJsTest) already declare it.

Testing

:mediaplayer:compileKotlinJvm, :mediaplayer:compileTestKotlinJvm and :mediaplayer:compileReleaseKotlinAndroid pass.


Prepared with an AI coding assistant (Claude Code) while integrating the library into a macOS desktop app, and tested as described above. Happy to adjust, split or drop anything that does not fit the project.

🤖 Generated with Claude Code

commonMain declared kotlinx-coroutines-test as an implementation dependency, so
every consumer got the test library on its runtime classpath. No main source
uses it; the test source sets (androidUnitTest, jvmTest, iosTest, wasmJsTest)
already declare it themselves.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@linster

linster commented Nov 10, 2026

Copy link
Copy Markdown

I've run into this issue while testing by hand, and this is the fix Opus 5.5 recommends.

linster added a commit to linster/e39-rpi that referenced this pull request Nov 10, 2026
composemediaplayer 0.10.0 (composemediaplayer-jvm) has
kotlinx-coroutines-test as a runtime dependency
(kdroidFilter/ComposeMediaPlayer#264, not in a
release yet).

kotlinx-coroutines-test and kotlinx-coroutines-swing both register a main
dispatcher in META-INF/services/kotlinx.coroutines.internal.MainDispatcherFactory.
packageUberJarForCurrentOs keeps only one copy of that file, and it was the
test one, so in the uber jar Dispatchers.Main resolved to
TestMainDispatcherFactory, which had nothing to delegate to:

  java.lang.IllegalStateException: Dispatchers.Main was accessed when the
  platform dispatcher was absent
    at kotlinx.coroutines.test.internal.TestMainDispatcherJvmKt.reportMissingMainCoroutineDispatcher
    ...
    at io.github.kdroidfilter.composemediaplayer.linux.LinuxVideoPlayerState$openUri$3.invokeSuspend(LinuxVideoPlayerState.kt:234)

Opening a video in the video player crashed this way (blank screen). It
works from IntelliJ because there the jars stay separate and both service
files are visible. Any Dispatchers.Main use in the uber jar was affected.

Exclude kotlinx-coroutines-test(-jvm) from composemediaplayer until a
release with the fix is available; desktopRuntimeClasspath then only has
kotlinx-coroutines-swing.
@kdroidFilter
kdroidFilter merged commit 5e3b90f into kdroidFilter:master Nov 10, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants