JetBrains / jewel

An implementation of the IntelliJ look and feels in Compose for Desktop
Apache License 2.0
634 stars 30 forks source link

Can't generate distributable app #404

Closed pablisco closed 2 weeks ago

pablisco commented 2 weeks ago

When trying to create a distributable app for mac the app crashes on launch.

The command used to generate the app (using the JBR SDK 17.0.9) is:

./gradlew :samples:standalone:createDistributable

When trying to launch the app directly, it crashes.

If we launch the app from the ${Package Contents}/Contents/MacOs/Jewel Sample we get the following exception:

Exception in thread "main" java.lang.ExceptionInInitializerError
    at org.jetbrains.jewel.samples.standalone.MainKt$main$1.invoke(Main.kt:37)
    at org.jetbrains.jewel.samples.standalone.MainKt$main$1.invoke(Main.kt:32)
    at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jb.kt:116)
    at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jb.kt:33)
    at androidx.compose.ui.window.Application_desktopKt$application$1$1.invoke(Application.desktop.kt:117)
    at androidx.compose.ui.window.Application_desktopKt$application$1$1.invoke(Application.desktop.kt:116)
    at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jb.kt:116)
    at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jb.kt:33)
    at androidx.compose.ui.window.Application_desktopKt$awaitApplication$2$1$2$1$1.invoke(Application.desktop.kt:233)
    at androidx.compose.ui.window.Application_desktopKt$awaitApplication$2$1$2$1$1.invoke(Application.desktop.kt:232)
    at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jb.kt:107)
    at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jb.kt:33)
    at androidx.compose.runtime.CompositionLocalKt.CompositionLocalProvider(CompositionLocal.kt:228)
    at androidx.compose.ui.window.Application_desktopKt$awaitApplication$2$1$2$1.invoke(Application.desktop.kt:223)
    at androidx.compose.ui.window.Application_desktopKt$awaitApplication$2$1$2$1.invoke(Application.desktop.kt:221)
    at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jb.kt:107)
    at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jb.kt:33)
    at androidx.compose.runtime.ActualJvm_jvmKt.invokeComposable(ActualJvm.jvm.kt:33)
    at androidx.compose.runtime.ComposerImpl.doCompose(Composer.kt:3303)
    at androidx.compose.runtime.ComposerImpl.composeContent$runtime(Composer.kt:3236)
    at androidx.compose.runtime.CompositionImpl.composeContent(Composition.kt:725)
    at androidx.compose.runtime.Recomposer.composeInitial$runtime(Recomposer.kt:1071)
    at androidx.compose.runtime.CompositionImpl.composeInitial(Composition.kt:633)
    at androidx.compose.runtime.CompositionImpl.setContent(Composition.kt:619)
    at androidx.compose.ui.window.Application_desktopKt$awaitApplication$2$1$2.invokeSuspend(Application.desktop.kt:221)
    at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
    at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:104)
    at java.desktop/java.awt.event.InvocationEvent.dispatch(Unknown Source)
    at java.desktop/java.awt.EventQueue.dispatchEventImpl(Unknown Source)
    at java.desktop/java.awt.EventQueue$3.run(Unknown Source)
    at java.desktop/java.awt.EventQueue$3.run(Unknown Source)
    at java.base/java.security.AccessController.doPrivileged(Unknown Source)
    at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
    at java.desktop/java.awt.EventQueue.dispatchEvent(Unknown Source)
    at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
    at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
    at java.desktop/java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
    at java.desktop/java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.desktop/java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.desktop/java.awt.EventDispatchThread.run(Unknown Source)
Caused by: java.nio.file.ProviderNotFoundException: Provider "jar" not found
    at java.base/java.nio.file.FileSystems.getFileSystem(Unknown Source)
    at org.jetbrains.jewel.samples.standalone.reflection.ViewsKt.findViews(Views.kt:25)
    at org.jetbrains.jewel.samples.standalone.viewmodel.MainViewModel.<clinit>(MainViewModel.kt:24)
    ... 40 more

This is the app generated: https://drive.google.com/file/d/1I80rROfa7Ri5dpXCCM6JKTeyd8WZ1DZw/view (GH has a 25MB limit)

rock3r commented 2 weeks ago
Caused by: java.nio.file.ProviderNotFoundException: Provider "jar" not found
    at java.base/java.nio.file.FileSystems.getFileSystem(Unknown Source)
    at org.jetbrains.jewel.samples.standalone.reflection.ViewsKt.findViews(Views.kt:25)

This looks like a packaging error (missing the reflection library?). To be clear, packaging our demos to distributable binaries is not supported by us. It may or may not work, but it's not something we care about, test for, and provide support for.

Generally speaking, packaging distributable apps is outside of Jewel's perview as a theming and components system.

pablisco commented 2 weeks ago

Ok, no worries. I'll try to investigate this from our side. I wanted to showcase the options to our designers without making them download InteliJ 😅 But yeah probably out of scope.

rock3r commented 2 weeks ago

I understand, but we just don't have bandwidth to support these scenarios :(