libres icon indicating copy to clipboard operation
libres copied to clipboard

Resource image not found on platforms

Open HLCaptain opened this issue 2 years ago • 6 comments

I placed my resources under commonMain besides the kotlin directory, inside the libres folder as stated in the README.md.

When trying to run my Compose Multiplatform JVM based desktop app, I get this exception when trying to get the painterResource for my Image composable:

Exception in thread "main" java.lang.IllegalArgumentException: Resource images/flower_image.jpg not found
	at androidx.compose.ui.res.ClassLoaderResourceLoader.load(Resources.desktop.kt:122)
	at androidx.compose.ui.res.Resources_desktopKt.openResource(Resources.desktop.kt:71)
	at androidx.compose.ui.res.PainterResources_desktopKt.rememberBitmapResource(PainterResources.desktop.kt:137)
	at androidx.compose.ui.res.PainterResources_desktopKt.painterResource(PainterResources.desktop.kt:70)
	at androidx.compose.ui.res.PainterResources_desktopKt.painterResource(PainterResources.desktop.kt:57)
	at io.github.skeptick.libres.compose.ActualsKt.painterResource(actuals.kt:9)
	at io.github.skeptick.libres.compose.PainterResourceKt.painterResource(PainterResource.kt:11)

Similar issue happens when running on JS based platform:

When requesting the flower_image.jpg, the GET request returns with a 404 (not found) status.

Platforms affected (Android works fine):

  • JVM
  • JS

Versions:

  • Kotlin: 1.9.20
  • Libres: 1.2.0
  • Compose Multiplatform: 1.5.10
  • Android Gradle Plugin: 8.2.0-rc02

I suspect, that resources' path has been changed recently, either with newer Kotlin or Compose Multiplatform versions.

HLCaptain avatar Nov 03 '23 15:11 HLCaptain

Path to your image looks like commonMain/libres/images/flower_image.jpg?

Skeptick avatar Nov 04 '23 20:11 Skeptick

Yes, it does. Also, string resources are working fine on all platforms.

HLCaptain avatar Nov 04 '23 23:11 HLCaptain

I will soon make an open-source repository so you may reproduce the problem. @Skeptick

HLCaptain avatar Nov 05 '23 12:11 HLCaptain

You can clone this branch to reproduce the problem.

HLCaptain avatar Nov 05 '23 22:11 HLCaptain

This issue isn't related to Libres. Typical JVM-application build doesn't include resources from other modules. You need to explicitly configure dependency or build a fat JAR. Or you can use compose plugin and add this code:

// desktop/build.gradle.kts
compose.desktop {
    application {
        mainClass = "com.example.demo.MainKt"
        nativeDistributions {
            targetFormats(TargetFormat.Dmg, TargetFormat.Msi, TargetFormat.Deb)
            packageName = "desktop"
            packageVersion = "1.0.0"
        }
    }
}

And run via ./gradlew desktop:run

Skeptick avatar Dec 03 '23 14:12 Skeptick

Thanks, will test this out later. I may do a PR about this though to update docs and clarify some things about resource management.

HLCaptain avatar Dec 04 '23 12:12 HLCaptain