Skip to content

Conversation

m-sasha
Copy link
Member

@m-sasha m-sasha commented Jun 17, 2025

AppCDS is a mechanism in the JDK/JVM which allows the developer to create an archive of classes that allows them to be loaded very quickly from disk, thus significantly reducing startup time. The archive is not portable, as it's some kind of a memory dump of the corresponding region.

To create/use this archive, the application needs to be run with special JVM flags.

I still need to test on Windows and Linux, but overall it seems to work.

Note that the distributable will be larger than usual because at minimum, the archive of the JRE classes needs to be packaged with the app. This takes about 7MB compressed (30MB uncompressed), but we can probably reduce it by 50% in the future (it creates two such files, but I believe only one is needed).

The API is a new section in compose.desktop { application { ... } }, e.g.

compose.desktop {
    application {
        appCds {
            mode = AppCdsMode.Auto
            logging = true
        }
    }
}

There are currently two modes:

Auto

In this mode, the archive is created when the end-user first runs the app.

Advantages:

  • Simplest - no additional step is needed to build the archive.
  • Creates a smaller distributable.

Drawbacks:

  • Requires JDK 19 or later.
  • The archive is not available at the first execution of the app,
    so it is slower (and possibly even slower than regular execution),
    The archive is created when at shutdown time of the first execution,
    which also takes a little longer.
  • Some OSes may block writing the archive file to the application's
    directory at runtime.

Prebuild

In this mode, the gradle plugin runs the app to create the archive.

Advantages:

  • Can be used with JDKs earlier than 19.
  • The first run of the distributed app is fast too.

Drawbacks:

  • Requires an additional step of running the app when building the
    distributable.
  • The distributable is larger because it includes the archive of
    the app's classes.

When the app is run to create the archive, we pass a system property compose.appcds.create-archive=true to it, so that it knows it's being run to create the archive. The app, when given this flag, should cause all the classes it wants to be in the archive to be loaded.

This can be very simple if the developer only wants to optimize startup. In this case, and if building the distributable manually, the developer can just manually quit the app after it is run. If building automatically (e.g. on a CI/CD), the app should check for the flag, wait until it has finished starting app, and exit. Something like this will work for most apps:

application {
    ...
    if (System.getProperty("compose.appcds.create-archive") == "true") {
        LaunchedEffect(Unit) {
            delay(10.seconds)  // Or wait for a custom event indicating the app finished startup
            exitApplication()
        }
    }
}

We could also add some support in Compose when running with this flag.

  • An isComposeIdle state, so the app can wait on that.
  • A completely automatic mode when we exit the app when isComposeIdle becomes true after startup.

Of course the developer may want to include classes other than the ones used on startup. For example, there may be a feature/screen in the app that loads many classes, and therefore takes a long time when used the first time. The app should then "use" this feature (or show the screen) and then quit.

Note that when building the distributable on a CI/CD machine, it will need to be able to run the app, and therefore will need to have a graphical environment. In the future, maybe we could execute the app using ImageComposeScene and not require a graphical environment.

Fixes https://youtrack.jetbrains.com/issue/CMP-8338/Support-AppCDS-in-Compose-for-Desktop

Testing

Tested manually on a demo app.

This should be tested by QA

Release Notes

Highlights - Desktop

  • Implemented support for AppCDS, which significantly speeds up application startup.

@m-sasha
Copy link
Member Author

m-sasha commented Jun 17, 2025

Please look at this carefully, as I'm far from an expert in Gradle, and may (even probably) have done something the wrong way.

@igordmn igordmn removed the request for review from AlexeyTsvetkov June 17, 2025 11:50
@m-sasha
Copy link
Member Author

m-sasha commented Jun 17, 2025

Any idea why it fails?

The exception is

Suppressed: java.nio.file.FileSystemException:
C:\Users\RUNNER~1\AppData\Local\Temp\junit5124997854187241525\build\intermediates\lint-cache\lintAnalyzeDemoDebug\migrated-jars\androidx.lifecycle.lint.LiveDataCoreIssueRegistry-32b654e6cacc2c23..jar:
The process cannot access the file because it is being used by another process

I've no idea what that test is, or what that file or other process is, or why there are two periods in the jar name.

@m-sasha
Copy link
Member Author

m-sasha commented Jun 17, 2025

Ok, so this test fails on master too: #5337

Copy link
Member

@terrakok terrakok left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

add tests please. to check DSL with kts + groovy scripts.
to check configuration cache and up-to-dateness of tasks.
to check a resulting artifact content

* Whether to ask the JVM to log AppCDS-related actions.
*/
@Suppress("MemberVisibilityCanBePrivate")
var logging: Boolean = false
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I would not add it to the DSL. Users are able to add the logging flag by their own if it is needed

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I wasn't sure as well, but this is a very useful feature, and most developers aren't familiar with AppCDS or its flags. So I think it's worhwhile; it will reduce the amount of questions ("Why doesn't it work for me?", "How do I know whether it works?") asked of us.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

maybe add it to the javadoc?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nobody reads the javadoc :)

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't agree. We say about the case when user already need to debug something. How will they find the option?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

As a flag in the primary DSL of the API it's much more visible in the documentation/examples than a side-note.

Also, the IDE helps discoverability:

image

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

When reading the API, without reading the implementation, I had the same questions why we need a separate logging property for a separate feature. By this logic, we should add a separate property for every feature (proguard, packaging resources, etc), which will be excessive.

It also confuses me as an user of the feature, adding more questions than answers: what is the difference with Gradle logging, when I need to set it, etc.

I would just add -Xlog:cds if (logger.isInfoEnabled). Info is the default. It doesn't look that cdc produces a lot of logs, so it shouldn't be an issue.

Copy link
Member Author

@m-sasha m-sasha Jul 1, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Removed the logging param.

@m-sasha m-sasha requested a review from terrakok June 21, 2025 10:59
@m-sasha m-sasha force-pushed the m-sasha/appcds branch 13 times, most recently from cda595e to dcb0db9 Compare June 22, 2025 10:29
@m-sasha m-sasha changed the title Implemented support for AppCDS Support for AppCDS Jun 22, 2025
@m-sasha m-sasha force-pushed the m-sasha/appcds branch 3 times, most recently from 7f126a1 to c5baf48 Compare June 22, 2025 13:21
@m-sasha m-sasha requested a review from terrakok June 23, 2025 21:36
* Whether to ask the JVM to log AppCDS-related actions.
*/
@Suppress("MemberVisibilityCanBePrivate")
var logging: Boolean = false
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

When reading the API, without reading the implementation, I had the same questions why we need a separate logging property for a separate feature. By this logic, we should add a separate property for every feature (proguard, packaging resources, etc), which will be excessive.

It also confuses me as an user of the feature, adding more questions than answers: what is the difference with Gradle logging, when I need to set it, etc.

I would just add -Xlog:cds if (logger.isInfoEnabled). Info is the default. It doesn't look that cdc produces a lot of logs, so it shouldn't be an issue.

* of the first execution, which also takes a little longer.
*/
@Suppress("unused")
val Auto = object : AppCdsMode("Auto") {
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Windows controlled access blocked creating the file:

Unable to create shared archive file D:\Work\compose-multiplatform\examples\codeviewer\desktopApp\build\compose\binaries\main\app\ComposeCodeViewer\app/app.jsa: (No such file or directory).
Error occurred during initialization of VM
Unable to use shared archive.

It blocks silently, until I reenable it in the notification list.

Is it possible to change its location to a local data folder?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'll see if it's possible.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

There's no expandable macro for any local data folder, unfortunately. It's supposed to expand environment variables (so I could at least construct the directory from, say, the user name), but even that didn't work in my tests.

So I can't construct an argument to -XX:SharedArchiveFile= that will point to a data folder.

Why does

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

-XX:SharedArchiveFile=

It looks like it is possible to specify the location of the file, but the issue is how to know the local folder?

Why does

This seems was cut

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

But not sure that Auto worth the trouble finding a way to write C:\ProgramData\ComposeCodeViewer (this is the right path for such files)

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It looks like it is possible to specify the location of the file, but the issue is how to know the local folder?

Yes.

This seems was cut

Don't remember what I was writing there.

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I pushed new commends, that was added before your comment, please read

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

But not sure that Auto worth the trouble finding a way to write C:\ProgramData\ComposeCodeViewer (this is the right path for such files)

If it's that folder then maybe it's possible. The only uncertain part here is C:\.

Considering all the cons, including the critical one with the firewall, it looks not suitable for production. But for debugging, it seems also not needed.
So, because there is no use case, it looks like it is better to remove this mode?

As I wrote in the kdoc, it's at least a quick way to get a feel of how fast your app will start. But also, not everyone needs to deploy on OSes that prevent writing to the app directory. And maybe we'll be able to solve it...

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

As I wrote in the kdoc, it's at least a quick way to get a feel of how fast your app will start.

It is only visible after the second run, as with Prebuilt. The first run actually slower, and can give wrong impression.

But also, not everyone needs to deploy on OSes that prevent writing to the app directory

Don't macOs/Linux also prohibit writing into the installed app folder?

But probably there is a case in Portable apps on all OSes. Not sure if it is worth supported.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It is only visible after the second run, as with Prebuilt. The first run actually slower, and can give wrong impression.

Yes. The user will need to read the docs to understand what's happening, there's no way around that. But setting up Prebuild mode correctly is more difficult.

Don't macOs/Linux also prohibit writing into the installed app folder?

macOS doesn't, which surprised me a bit, honestly.

* the app's classes.
*/
@Suppress("unused")
val Prebuild = object : AppCdsMode("Prebuild") {
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

When I call ./gradlew packageMsi and then install it, app.jsa is not the installed folder, and startup time is the same as without CDS.

Though, I see the cds logs, there was a run of the application, and there is app.jsa created in the build/compose/binaries/main/app/ComposeCodeViewer/app

Manually copying app.jsa into the <installation path>/app doesn't help, the startup time isn't improved

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fixed.

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I see that ./gradlew packageMsi packages app.jsa, but it doesn't work. The startup time is:

first run - 2.5 sec (as in the case of Auto mode, when it is slow down the first execution)
second - 0.8 sec (as in the case of None mode)

I expect it to be 0.4 sec, as I see in createDistributable

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Try with exitAppOnCdsFailure=true. If the app opens then it works and what you're seeing is I/O reading the files from disk and them being cached on the following runs.

Copy link
Collaborator

@igordmn igordmn Jul 4, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I have this error with additional jvmArgs += listOf("-Xlog:class+path=info"):

[0.018s][info][class,path] bootstrap loader class path=C:\Program Files\ComposeCodeViewer\runtime\lib\modules
[0.022s][info][cds       ] trying to map C:\Program Files\ComposeCodeViewer\runtime\bin\server\classes.jsa
[0.028s][info][cds       ] Opened archive C:\Program Files\ComposeCodeViewer\runtime\bin\server\classes.jsa.
[0.028s][info][cds       ] Archive was created with UseCompressedOops = 1, UseCompressedClassPointers = 1
[0.028s][info][cds       ] full module graph: disabled because archive was created without full module graph
[0.028s][info][cds       ] Core region alignment: 65536
[0.028s][info][cds       ] trying to map C:\Program Files\ComposeCodeViewer\app/app.jsa
[0.028s][info][cds       ] Opened archive C:\Program Files\ComposeCodeViewer\app/app.jsa.
[0.029s][info][cds       ] Archive was created with UseCompressedOops = 1, UseCompressedClassPointers = 1
[0.029s][info][cds       ] full module graph: disabled because archive was created without full module graph
[0.029s][info][cds       ] Reserved archive_space_rs [0x0000000800000000 - 0x0000000802660000] (40239104) bytes
[0.029s][info][cds       ] Reserved class_space_rs   [0x0000000802800000 - 0x0000000842800000] (1073741824) bytes
[0.029s][info][cds       ] Windows mmap workaround: releasing archive space.
[0.029s][info][cds       ] Mapped static  region #0 at base 0x0000000800000000 top 0x0000000800460000 (ReadWrite)
[0.029s][info][cds       ] Mapped static  region #1 at base 0x0000000800460000 top 0x0000000800ac0000 (ReadOnly)
[0.029s][info][class,path] Expecting BOOT path=C:\Program Files\ComposeCodeViewer\runtime\lib\modules
[0.029s][info][class,path] Expecting -Djava.class.path=D:\Work\compose-multiplatform\examples\codeviewer\\gradle\wrapper\gradle-wrapper.jar
[0.029s][info][class,path] checking shared classpath entry: C:\Program Files\ComposeCodeViewer\runtime\lib\modules
[0.030s][info][class,path] ok
[0.030s][info][cds       ] Mapped dynamic region #0 at base 0x0000000800ac0000 top 0x0000000801430000 (ReadWrite)
[0.030s][info][cds       ] Mapped dynamic region #1 at base 0x0000000801430000 top 0x0000000802660000 (ReadOnly)
[0.030s][info][class,path] Expecting BOOT path=C:\Program Files\ComposeCodeViewer\runtime\lib\modules
[0.030s][info][class,path] Expecting -Djava.class.path=D:\Work\compose-multiplatform\examples\codeviewer\desktopApp\build\compose\binaries\main\app\ComposeCodeViewer\app\desktopApp-jvm-28617597e2c8b180e33b1ce49fe5eec.jar;D:\Work\compose-multiplatform\examples\codeviewer\desktopApp\build\compose\binaries\main\app\ComposeCodeViewer\app\animation-core-desktop-1.9.0-alpha02-6f9a89d5ed2beb9c510ee1fccf28055.jar;D:\Work\compose-multiplatform\examples\codeviewer\desktopApp\build\compose\binaries\main\app\ComposeCodeViewer\app\animation-desktop-1.9.0-alpha02-caa3e61cbdf98d3956dd8976d11a2e8.jar;D:\Work\compose-multiplatform\examples\codeviewer\desktopApp\build\compose\binaries\main\app\ComposeCodeViewer\app\annotation-jvm-1.9.1-1d6a04b3b9847638d0529df8ef76a.jar;D:\Work\compose-multiplatform\examples\codeviewer\desktopApp\build\compose\binaries\main\app\ComposeCodeViewer\app\annotations-23.0.0-8484cd17d040d837983323f760b2c660.jar;D:\Work\compose-multiplatform\examples\codeviewer\desktopApp\build\compose\binaries\main\app\ComposeCodeViewer\app\atomicfu-jvm-0.23.2-5e4f88ed1c37222d791f5dcadf481498.jar;D:\Work\compose-multiplatform\examples\codeviewer\desktopApp\build\compose\binaries\main\app\ComposeCodeViewer\app\collection-jvm-1.5.0-4421442c114a4f8c8fe587cf2d668237.jar;D:\Work\compose-multiplatform\examples\codeviewer\desktopApp\build\compose\binaries\main\app\ComposeCodeViewer\app\core-common-2.2.0-2212d240dfe1e8a7598ee117ccc316d.jar;D:\Work\compose-multiplatform\examples\codeviewer\desktopApp\build\compose\binaries\main\app\ComposeCodeViewer\app\desktop-jvm-1.9.0-alpha02-d950f0d452fcdcba52d4c7bef9b82f3.jar;D:\Work\compose-multiplatform\examples\codeviewer\desktopApp\build\compose\binaries\main\app\ComposeCodeViewer\app\foundation-desktop-1.9.0-alpha02-99241c45102e545e3aeaa9bca9a6a1c7.jar;D:\Work\compose-multiplatform\examples\codeviewer\desktopApp\build\compose\binaries\main\app\ComposeCodeViewer\app\foundation-layout-desktop-1.9.0-alpha02-9dd78566d6e0b8aca1b6b5dc4bd3365.jar;D:\Work\compose-multiplatform\examples\codeviewer\desktopApp\build\compose\binaries\main\app\ComposeCodeViewer\app\jbr-api-1.5.0-377e771977886f74954db4278394c51.jar;D:\Work\compose-multiplatform\examples\codeviewer\desktopApp\build\compose\binaries\main\app\ComposeCodeViewer\app\jspecify-1.0.0-9133aba420d0ca3b01dbb6ae9992cf6.jar;D:\Work\compose-multiplatform\examples\codeviewer\desktopApp\build\compose\binaries\main\app\ComposeCodeViewer\app\kotlin-stdlib-2.1.21-1269975f32698511a6062a4db34d0.jar;D:\Work\compose-multiplatform\examples\codeviewer\desktopApp\build\compose\binaries\main\app\ComposeCodeViewer\app\kotlin-stdlib-jdk7-2.1.21-4b5377b637f6ef7f833899a93b9862c.jar;D:\Work\compose-multiplatform\examples\codeviewer\desktopApp\build\compose\binaries\main\app\ComposeCodeViewer\app\kotlin-stdlib-jdk8-2.1.21-affbe0196f13ecc7ad85e8d3feb4d96.jar;D:\Work\compose-multiplatform\examples\codeviewer\desktopApp\build\compose\binaries\main\app\ComposeCodeViewer\app\kotlinx-coroutines-core-jvm-1.8.0-d2920b1d99a82fafcceabc3a48f7e0.jar;D:\Work\compose-multiplatform\examples\codeviewer\desktopApp\build\compose\binaries\main\app\ComposeCodeViewer\app\kotlinx-serialization-core-jvm-1.7.3-58c2ba33122ceccf1b35147f3db945f8.jar;D:\Work\compose-multiplatform\examples\codeviewer\desktopApp\build\compose\binaries\main\app\ComposeCodeViewer\app\library-desktop-1.9.0-alpha02-51ea3b49d1e8f140eeb3b85312a8818c.jar;D:\Work\compose-multiplatform\examples\codeviewer\desktopApp\build\compose\binaries\main\app\ComposeCodeViewer\app\lifecycle-common-jvm-2.9.0-6430746dbcfa6c26a0d997b9c76f84c.jar;D:\Work\compose-multiplatform\examples\codeviewer\desktopApp\build\compose\binaries\main\app\ComposeCodeViewer\app\lifecycle-runtime-compose-desktop-2.8.4-7aa4c61a74a64c3df8de58b46c853dc8.jar;D:\Work\compose-multiplatform\examples\codeviewer\desktopApp\build\compose\binaries\main\app\ComposeCodeViewer\app\lifecycle-runtime-desktop-2.9.0-e378ed7159668cd48bbb4798fa7e25e0.jar;D:\Work\compose-multiplatform\examples\codeviewer\desktopApp\build\compose\binaries\main\app\ComposeCodeViewer\app\lifecycle-viewmodel-desktop-2.9.0-14698f2fcded304fb9c11fffdbbdab23.jar;D:\Work\compose-multiplatform\examples\codeviewer\desktopApp\build\compose\binaries\main\app\ComposeCodeViewer\app\material-desktop-1.9.0-alpha02-1014ffb1b47abac15c8e53831a7d31c.jar;D:\Work\compose-multiplatform\examples\codeviewer\desktopApp\build\compose\binaries\main\app\ComposeCodeViewer\app\material-icons-core-desktop-1.7.3-23eaca5d2a4caa3e4077a0e9fd549d68.jar;D:\Work\compose-multiplatform\examples\codeviewer\desktopApp\build\compose\binaries\main\app\ComposeCodeViewer\app\material-icons-extended-desktop-1.7.3-848bc0f13628d5b3accc94dd3afdfa27.jar;D:\Work\compose-multiplatform\examples\codeviewer\desktopApp\build\compose\binaries\main\app\ComposeCodeViewer\app\material-ripple-desktop-1.9.0-alpha02-a2d96a4ec0b12eca85ecde481bb3541c.jar;D:\Work\compose-multiplatform\examples\codeviewer\desktopApp\build\compose\binaries\main\app\ComposeCodeViewer\app\runtime-annotation-jvm-1.9.0-alpha03-8bc557e47732076f9cbfe7c4a3c7758.jar;D:\Work\compose-multiplatform\examples\codeviewer\desktopApp\build\compose\binaries\main\app\ComposeCodeViewer\app\runtime-desktop-1.9.0-alpha02-2e45e1d8d13138705e71cf8cd3912ed7.jar;D:\Work\compose-multiplatform\examples\codeviewer\desktopApp\build\compose\binaries\main\app\ComposeCodeViewer\app\runtime-saveable-desktop-1.9.0-alpha02-2fc3ab80ee30c41ea977a4e1ce24a9bb.jar;D:\Work\compose-multiplatform\examples\codeviewer\desktopApp\build\compose\binaries\main\app\ComposeCodeViewer\app\savedstate-compose-desktop-1.3.0-43308e58b734a49c9cd440838ca7ca4f.jar;D:\Work\compose-multiplatform\examples\codeviewer\desktopApp\build\compose\binaries\main\app\ComposeCodeViewer\app\savedstate-desktop-1.3.0-6eb117ede490f3573e492568dae9a0db.jar;D:\Work\compose-multiplatform\examples\codeviewer\desktopApp\build\compose\binaries\main\app\ComposeCodeViewer\app\shared-desktop-1.0-SNAPSHOT-80988bb559d7077f9feafb419bfa91e.jar;D:\Work\compose-multiplatform\examples\codeviewer\desktopApp\build\compose\binaries\main\app\ComposeCodeViewer\app\skiko-awt-0.9.17-a269543e0218e4fa205024909691e3.jar;D:\Work\compose-multiplatform\examples\codeviewer\desktopApp\build\compose\binaries\main\app\ComposeCodeViewer\app\skiko-awt-runtime-windows-x64-0.9.17-9f41b28bd5abe7e952a648697a1c8736.jar;D:\Work\compose-multiplatform\examples\codeviewer\desktopApp\build\compose\binaries\main\app\ComposeCodeViewer\app\ui-backhandler-desktop-1.9.0-alpha02-4d589666e8634ba6132b6d4114b3df4.jar;D:\Work\compose-multiplatform\examples\codeviewer\desktopApp\build\compose\binaries\main\app\ComposeCodeViewer\app\ui-desktop-1.9.0-alpha02-cae5fea32e80c08dce444656dd316a28.jar;D:\Work\compose-multiplatform\examples\codeviewer\desktopApp\build\compose\binaries\main\app\ComposeCodeViewer\app\ui-geometry-desktop-1.9.0-alpha02-f8786bed2d564c957589f09db5f5bf21.jar;D:\Work\compose-multiplatform\examples\codeviewer\desktopApp\build\compose\binaries\main\app\ComposeCodeViewer\app\ui-graphics-desktop-1.9.0-alpha02-593dc6288729d452214df28b3faa4cd.jar;D:\Work\compose-multiplatform\examples\codeviewer\desktopApp\build\compose\binaries\main\app\ComposeCodeViewer\app\ui-text-desktop-1.9.0-alpha02-33d950e55ced10c8c2d3db56efa9e75.jar;D:\Work\compose-multiplatform\examples\codeviewer\desktopApp\build\compose\binaries\main\app\ComposeCodeViewer\app\ui-tooling-preview-desktop-1.9.0-alpha02-73677496a752bcd40d3273b24dbfbbc.jar;D:\Work\compose-multiplatform\examples\codeviewer\desktopApp\build\compose\binaries\main\app\ComposeCodeViewer\app\ui-unit-desktop-1.9.0-alpha02-5488852be2e8c8908990d2539f03158.jar;D:\Work\compose-multiplatform\examples\codeviewer\desktopApp\build\compose\binaries\main\app\ComposeCodeViewer\app\ui-util-desktop-1.9.0-alpha02-8cabca1f2697f86d58fd79f42c87512.jar
[0.030s][info][class,path] checking shared classpath entry: C:\Program Files\ComposeCodeViewer\runtime\lib\modules
[0.030s][info][class,path] ok
[0.030s][info][class,path] checking shared classpath entry: D:\Work\compose-multiplatform\examples\codeviewer\desktopApp\build\compose\binaries\main\app\ComposeCodeViewer\app\desktopApp-jvm-28617597e2c8b180e33b1ce49fe5eec.jar
[0.031s][info][class,path] ok
[0.031s][info][class,path] checking shared classpath entry: D:\Work\compose-multiplatform\examples\codeviewer\desktopApp\build\compose\binaries\main\app\ComposeCodeViewer\app\animation-core-desktop-1.9.0-alpha02-6f9a89d5ed2beb9c510ee1fccf28055.jar
[0.031s][info][class,path] ok
[0.031s][info][class,path] checking shared classpath entry: D:\Work\compose-multiplatform\examples\codeviewer\desktopApp\build\compose\binaries\main\app\ComposeCodeViewer\app\animation-desktop-1.9.0-alpha02-caa3e61cbdf98d3956dd8976d11a2e8.jar
[0.031s][info][class,path] ok
[0.031s][info][class,path] checking shared classpath entry: D:\Work\compose-multiplatform\examples\codeviewer\desktopApp\build\compose\binaries\main\app\ComposeCodeViewer\app\annotation-jvm-1.9.1-1d6a04b3b9847638d0529df8ef76a.jar
[0.031s][info][class,path] ok
[0.031s][info][class,path] checking shared classpath entry: D:\Work\compose-multiplatform\examples\codeviewer\desktopApp\build\compose\binaries\main\app\ComposeCodeViewer\app\annotations-23.0.0-8484cd17d040d837983323f760b2c660.jar
[0.031s][info][class,path] ok
[0.031s][info][class,path] checking shared classpath entry: D:\Work\compose-multiplatform\examples\codeviewer\desktopApp\build\compose\binaries\main\app\ComposeCodeViewer\app\atomicfu-jvm-0.23.2-5e4f88ed1c37222d791f5dcadf481498.jar
[0.031s][info][class,path] ok
[0.031s][info][class,path] checking shared classpath entry: D:\Work\compose-multiplatform\examples\codeviewer\desktopApp\build\compose\binaries\main\app\ComposeCodeViewer\app\collection-jvm-1.5.0-4421442c114a4f8c8fe587cf2d668237.jar
[0.031s][info][class,path] ok
[0.032s][info][class,path] checking shared classpath entry: D:\Work\compose-multiplatform\examples\codeviewer\desktopApp\build\compose\binaries\main\app\ComposeCodeViewer\app\core-common-2.2.0-2212d240dfe1e8a7598ee117ccc316d.jar
[0.032s][info][class,path] ok
[0.032s][info][class,path] checking shared classpath entry: D:\Work\compose-multiplatform\examples\codeviewer\desktopApp\build\compose\binaries\main\app\ComposeCodeViewer\app\desktop-jvm-1.9.0-alpha02-d950f0d452fcdcba52d4c7bef9b82f3.jar
[0.032s][info][class,path] ok
[0.032s][info][class,path] checking shared classpath entry: D:\Work\compose-multiplatform\examples\codeviewer\desktopApp\build\compose\binaries\main\app\ComposeCodeViewer\app\foundation-desktop-1.9.0-alpha02-99241c45102e545e3aeaa9bca9a6a1c7.jar
[0.032s][info][class,path] ok
[0.032s][info][class,path] checking shared classpath entry: D:\Work\compose-multiplatform\examples\codeviewer\desktopApp\build\compose\binaries\main\app\ComposeCodeViewer\app\foundation-layout-desktop-1.9.0-alpha02-9dd78566d6e0b8aca1b6b5dc4bd3365.jar
[0.032s][info][class,path] ok
[0.032s][info][class,path] checking shared classpath entry: D:\Work\compose-multiplatform\examples\codeviewer\desktopApp\build\compose\binaries\main\app\ComposeCodeViewer\app\jbr-api-1.5.0-377e771977886f74954db4278394c51.jar
[0.032s][info][class,path] ok
[0.032s][info][class,path] checking shared classpath entry: D:\Work\compose-multiplatform\examples\codeviewer\desktopApp\build\compose\binaries\main\app\ComposeCodeViewer\app\jspecify-1.0.0-9133aba420d0ca3b01dbb6ae9992cf6.jar
[0.032s][info][class,path] ok
[0.032s][info][class,path] checking shared classpath entry: D:\Work\compose-multiplatform\examples\codeviewer\desktopApp\build\compose\binaries\main\app\ComposeCodeViewer\app\kotlin-stdlib-2.1.21-1269975f32698511a6062a4db34d0.jar
[0.033s][info][class,path] ok
[0.033s][info][class,path] checking shared classpath entry: D:\Work\compose-multiplatform\examples\codeviewer\desktopApp\build\compose\binaries\main\app\ComposeCodeViewer\app\kotlin-stdlib-jdk7-2.1.21-4b5377b637f6ef7f833899a93b9862c.jar
[0.033s][info][class,path] ok
[0.033s][info][class,path] checking shared classpath entry: D:\Work\compose-multiplatform\examples\codeviewer\desktopApp\build\compose\binaries\main\app\ComposeCodeViewer\app\kotlin-stdlib-jdk8-2.1.21-affbe0196f13ecc7ad85e8d3feb4d96.jar
[0.033s][info][class,path] ok
[0.033s][info][class,path] checking shared classpath entry: D:\Work\compose-multiplatform\examples\codeviewer\desktopApp\build\compose\binaries\main\app\ComposeCodeViewer\app\kotlinx-coroutines-core-jvm-1.8.0-d2920b1d99a82fafcceabc3a48f7e0.jar
[0.033s][info][class,path] ok
[0.033s][info][class,path] checking shared classpath entry: D:\Work\compose-multiplatform\examples\codeviewer\desktopApp\build\compose\binaries\main\app\ComposeCodeViewer\app\kotlinx-serialization-core-jvm-1.7.3-58c2ba33122ceccf1b35147f3db945f8.jar
[0.033s][info][class,path] ok
[0.033s][info][class,path] checking shared classpath entry: D:\Work\compose-multiplatform\examples\codeviewer\desktopApp\build\compose\binaries\main\app\ComposeCodeViewer\app\library-desktop-1.9.0-alpha02-51ea3b49d1e8f140eeb3b85312a8818c.jar
[0.033s][info][class,path] ok
[0.033s][info][class,path] checking shared classpath entry: D:\Work\compose-multiplatform\examples\codeviewer\desktopApp\build\compose\binaries\main\app\ComposeCodeViewer\app\lifecycle-common-jvm-2.9.0-6430746dbcfa6c26a0d997b9c76f84c.jar
[0.034s][info][class,path] ok
[0.034s][info][class,path] checking shared classpath entry: D:\Work\compose-multiplatform\examples\codeviewer\desktopApp\build\compose\binaries\main\app\ComposeCodeViewer\app\lifecycle-runtime-compose-desktop-2.8.4-7aa4c61a74a64c3df8de58b46c853dc8.jar
[0.034s][info][class,path] ok
[0.034s][info][class,path] checking shared classpath entry: D:\Work\compose-multiplatform\examples\codeviewer\desktopApp\build\compose\binaries\main\app\ComposeCodeViewer\app\lifecycle-runtime-desktop-2.9.0-e378ed7159668cd48bbb4798fa7e25e0.jar
[0.034s][info][class,path] ok
[0.034s][info][class,path] checking shared classpath entry: D:\Work\compose-multiplatform\examples\codeviewer\desktopApp\build\compose\binaries\main\app\ComposeCodeViewer\app\lifecycle-viewmodel-desktop-2.9.0-14698f2fcded304fb9c11fffdbbdab23.jar
[0.034s][info][class,path] ok
[0.034s][info][class,path] checking shared classpath entry: D:\Work\compose-multiplatform\examples\codeviewer\desktopApp\build\compose\binaries\main\app\ComposeCodeViewer\app\material-desktop-1.9.0-alpha02-1014ffb1b47abac15c8e53831a7d31c.jar
[0.034s][info][class,path] ok
[0.034s][info][class,path] checking shared classpath entry: D:\Work\compose-multiplatform\examples\codeviewer\desktopApp\build\compose\binaries\main\app\ComposeCodeViewer\app\material-icons-core-desktop-1.7.3-23eaca5d2a4caa3e4077a0e9fd549d68.jar
[0.034s][info][class,path] ok
[0.035s][info][class,path] checking shared classpath entry: D:\Work\compose-multiplatform\examples\codeviewer\desktopApp\build\compose\binaries\main\app\ComposeCodeViewer\app\material-icons-extended-desktop-1.7.3-848bc0f13628d5b3accc94dd3afdfa27.jar
[0.035s][info][class,path] ok
[0.035s][info][class,path] checking shared classpath entry: D:\Work\compose-multiplatform\examples\codeviewer\desktopApp\build\compose\binaries\main\app\ComposeCodeViewer\app\material-ripple-desktop-1.9.0-alpha02-a2d96a4ec0b12eca85ecde481bb3541c.jar
[0.035s][info][class,path] ok
[0.035s][info][class,path] checking shared classpath entry: D:\Work\compose-multiplatform\examples\codeviewer\desktopApp\build\compose\binaries\main\app\ComposeCodeViewer\app\runtime-annotation-jvm-1.9.0-alpha03-8bc557e47732076f9cbfe7c4a3c7758.jar
[0.035s][info][class,path] ok
[0.035s][info][class,path] checking shared classpath entry: D:\Work\compose-multiplatform\examples\codeviewer\desktopApp\build\compose\binaries\main\app\ComposeCodeViewer\app\runtime-desktop-1.9.0-alpha02-2e45e1d8d13138705e71cf8cd3912ed7.jar
[0.035s][info][class,path] ok
[0.035s][info][class,path] checking shared classpath entry: D:\Work\compose-multiplatform\examples\codeviewer\desktopApp\build\compose\binaries\main\app\ComposeCodeViewer\app\runtime-saveable-desktop-1.9.0-alpha02-2fc3ab80ee30c41ea977a4e1ce24a9bb.jar
[0.035s][info][class,path] ok
[0.035s][info][class,path] checking shared classpath entry: D:\Work\compose-multiplatform\examples\codeviewer\desktopApp\build\compose\binaries\main\app\ComposeCodeViewer\app\savedstate-compose-desktop-1.3.0-43308e58b734a49c9cd440838ca7ca4f.jar
[0.035s][info][class,path] ok
[0.036s][info][class,path] checking shared classpath entry: D:\Work\compose-multiplatform\examples\codeviewer\desktopApp\build\compose\binaries\main\app\ComposeCodeViewer\app\savedstate-desktop-1.3.0-6eb117ede490f3573e492568dae9a0db.jar
[0.036s][info][class,path] ok
[0.036s][info][class,path] checking shared classpath entry: D:\Work\compose-multiplatform\examples\codeviewer\desktopApp\build\compose\binaries\main\app\ComposeCodeViewer\app\shared-desktop-1.0-SNAPSHOT-80988bb559d7077f9feafb419bfa91e.jar
[0.036s][info][class,path] ok
[0.036s][info][class,path] checking shared classpath entry: D:\Work\compose-multiplatform\examples\codeviewer\desktopApp\build\compose\binaries\main\app\ComposeCodeViewer\app\skiko-awt-0.9.17-a269543e0218e4fa205024909691e3.jar
[0.036s][info][class,path] ok
[0.036s][info][class,path] checking shared classpath entry: D:\Work\compose-multiplatform\examples\codeviewer\desktopApp\build\compose\binaries\main\app\ComposeCodeViewer\app\skiko-awt-runtime-windows-x64-0.9.17-9f41b28bd5abe7e952a648697a1c8736.jar
[0.036s][info][class,path] ok
[0.036s][info][class,path] checking shared classpath entry: D:\Work\compose-multiplatform\examples\codeviewer\desktopApp\build\compose\binaries\main\app\ComposeCodeViewer\app\ui-backhandler-desktop-1.9.0-alpha02-4d589666e8634ba6132b6d4114b3df4.jar
[0.036s][info][class,path] ok
[0.036s][info][class,path] checking shared classpath entry: D:\Work\compose-multiplatform\examples\codeviewer\desktopApp\build\compose\binaries\main\app\ComposeCodeViewer\app\ui-desktop-1.9.0-alpha02-cae5fea32e80c08dce444656dd316a28.jar
[0.037s][info][class,path] ok
[0.037s][info][class,path] checking shared classpath entry: D:\Work\compose-multiplatform\examples\codeviewer\desktopApp\build\compose\binaries\main\app\ComposeCodeViewer\app\ui-geometry-desktop-1.9.0-alpha02-f8786bed2d564c957589f09db5f5bf21.jar
[0.037s][info][class,path] ok
[0.037s][info][class,path] checking shared classpath entry: D:\Work\compose-multiplatform\examples\codeviewer\desktopApp\build\compose\binaries\main\app\ComposeCodeViewer\app\ui-graphics-desktop-1.9.0-alpha02-593dc6288729d452214df28b3faa4cd.jar
[0.037s][info][class,path] ok
[0.037s][info][class,path] checking shared classpath entry: D:\Work\compose-multiplatform\examples\codeviewer\desktopApp\build\compose\binaries\main\app\ComposeCodeViewer\app\ui-text-desktop-1.9.0-alpha02-33d950e55ced10c8c2d3db56efa9e75.jar
[0.037s][info][class,path] ok
[0.037s][info][class,path] checking shared classpath entry: D:\Work\compose-multiplatform\examples\codeviewer\desktopApp\build\compose\binaries\main\app\ComposeCodeViewer\app\ui-tooling-preview-desktop-1.9.0-alpha02-73677496a752bcd40d3273b24dbfbbc.jar
[0.037s][info][class,path] ok
[0.037s][info][class,path] checking shared classpath entry: D:\Work\compose-multiplatform\examples\codeviewer\desktopApp\build\compose\binaries\main\app\ComposeCodeViewer\app\ui-unit-desktop-1.9.0-alpha02-5488852be2e8c8908990d2539f03158.jar
[0.037s][info][class,path] ok
[0.037s][info][class,path] checking shared classpath entry: D:\Work\compose-multiplatform\examples\codeviewer\desktopApp\build\compose\binaries\main\app\ComposeCodeViewer\app\ui-util-desktop-1.9.0-alpha02-8cabca1f2697f86d58fd79f42c87512.jar
[0.038s][info][class,path] ok
[0.038s][info][class,path] [APP classpath mismatch, actual: -Djava.class.path=C:\Program Files\ComposeCodeViewer\app\desktopApp-jvm-28617597e2c8b180e33b1ce49fe5eec.jar;C:\Program Files\ComposeCodeViewer\app\animation-core-desktop-1.9.0-alpha02-6f9a89d5ed2beb9c510ee1fccf28055.jar;C:\Program Files\ComposeCodeViewer\app\animation-desktop-1.9.0-alpha02-caa3e61cbdf98d3956dd8976d11a2e8.jar;C:\Program Files\ComposeCodeViewer\app\annotation-jvm-1.9.1-1d6a04b3b9847638d0529df8ef76a.jar;C:\Program Files\ComposeCodeViewer\app\annotations-23.0.0-8484cd17d040d837983323f760b2c660.jar;C:\Program Files\ComposeCodeViewer\app\atomicfu-jvm-0.23.2-5e4f88ed1c37222d791f5dcadf481498.jar;C:\Program Files\ComposeCodeViewer\app\collection-jvm-1.5.0-4421442c114a4f8c8fe587cf2d668237.jar;C:\Program Files\ComposeCodeViewer\app\core-common-2.2.0-2212d240dfe1e8a7598ee117ccc316d.jar;C:\Program Files\ComposeCodeViewer\app\desktop-jvm-1.9.0-alpha02-d950f0d452fcdcba52d4c7bef9b82f3.jar;C:\Program Files\ComposeCodeViewer\app\foundation-desktop-1.9.0-alpha02-99241c45102e545e3aeaa9bca9a6a1c7.jar;C:\Program Files\ComposeCodeViewer\app\foundation-layout-desktop-1.9.0-alpha02-9dd78566d6e0b8aca1b6b5dc4bd3365.jar;C:\Program Files\ComposeCodeViewer\app\jbr-api-1.5.0-377e771977886f74954db4278394c51.jar;C:\Program Files\ComposeCodeViewer\app\jspecify-1.0.0-9133aba420d0ca3b01dbb6ae9992cf6.jar;C:\Program Files\ComposeCodeViewer\app\kotlin-stdlib-2.1.21-1269975f32698511a6062a4db34d0.jar;C:\Program Files\ComposeCodeViewer\app\kotlin-stdlib-jdk7-2.1.21-4b5377b637f6ef7f833899a93b9862c.jar;C:\Program Files\ComposeCodeViewer\app\kotlin-stdlib-jdk8-2.1.21-affbe0196f13ecc7ad85e8d3feb4d96.jar;C:\Program Files\ComposeCodeViewer\app\kotlinx-coroutines-core-jvm-1.8.0-d2920b1d99a82fafcceabc3a48f7e0.jar;C:\Program Files\ComposeCodeViewer\app\kotlinx-serialization-core-jvm-1.7.3-58c2ba33122ceccf1b35147f3db945f8.jar;C:\Program Files\ComposeCodeViewer\app\library-desktop-1.9.0-alpha02-51ea3b49d1e8f140eeb3b85312a8818c.jar;C:\Program Files\ComposeCodeViewer\app\lifecycle-common-jvm-2.9.0-6430746dbcfa6c26a0d997b9c76f84c.jar;C:\Program Files\ComposeCodeViewer\app\lifecycle-runtime-compose-desktop-2.8.4-7aa4c61a74a64c3df8de58b46c853dc8.jar;C:\Program Files\ComposeCodeViewer\app\lifecycle-runtime-desktop-2.9.0-e378ed7159668cd48bbb4798fa7e25e0.jar;C:\Program Files\ComposeCodeViewer\app\lifecycle-viewmodel-desktop-2.9.0-14698f2fcded304fb9c11fffdbbdab23.jar;C:\Program Files\ComposeCodeViewer\app\material-desktop-1.9.0-alpha02-1014ffb1b47abac15c8e53831a7d31c.jar;C:\Program Files\ComposeCodeViewer\app\material-icons-core-desktop-1.7.3-23eaca5d2a4caa3e4077a0e9fd549d68.jar;C:\Program Files\ComposeCodeViewer\app\material-icons-extended-desktop-1.7.3-848bc0f13628d5b3accc94dd3afdfa27.jar;C:\Program Files\ComposeCodeViewer\app\material-ripple-desktop-1.9.0-alpha02-a2d96a4ec0b12eca85ecde481bb3541c.jar;C:\Program Files\ComposeCodeViewer\app\runtime-annotation-jvm-1.9.0-alpha03-8bc557e47732076f9cbfe7c4a3c7758.jar;C:\Program Files\ComposeCodeViewer\app\runtime-desktop-1.9.0-alpha02-2e45e1d8d13138705e71cf8cd3912ed7.jar;C:\Program Files\ComposeCodeViewer\app\runtime-saveable-desktop-1.9.0-alpha02-2fc3ab80ee30c41ea977a4e1ce24a9bb.jar;C:\Program Files\ComposeCodeViewer\app\savedstate-compose-desktop-1.3.0-43308e58b734a49c9cd440838ca7ca4f.jar;C:\Program Files\ComposeCodeViewer\app\savedstate-desktop-1.3.0-6eb117ede490f3573e492568dae9a0db.jar;C:\Program Files\ComposeCodeViewer\app\shared-desktop-1.0-SNAPSHOT-80988bb559d7077f9feafb419bfa91e.jar;C:\Program Files\ComposeCodeViewer\app\skiko-awt-0.9.17-a269543e0218e4fa205024909691e3.jar;C:\Program Files\ComposeCodeViewer\app\skiko-awt-runtime-windows-x64-0.9.17-9f41b28bd5abe7e952a648697a1c8736.jar;C:\Program Files\ComposeCodeViewer\app\ui-backhandler-desktop-1.9.0-alpha02-4d589666e8634ba6132b6d4114b3df4.jar;C:\Program Files\ComposeCodeViewer\app\ui-desktop-1.9.0-alpha02-cae5fea32e80c08dce444656dd316a28.jar;C:\Program Files\ComposeCodeViewer\app\ui-geometry-desktop-1.9.0-alpha02-f8786bed2d564c957589f09db5f5bf21.jar;C:\Program Files\ComposeCodeViewer\app\ui-graphics-desktop-1.9.0-alpha02-593dc6288729d452214df28b3faa4cd.jar;C:\Program Files\ComposeCodeViewer\app\ui-text-desktop-1.9.0-alpha02-33d950e55ced10c8c2d3db56efa9e75.jar;C:\Program Files\ComposeCodeViewer\app\ui-tooling-preview-desktop-1.9.0-alpha02-73677496a752bcd40d3273b24dbfbbc.jar;C:\Program Files\ComposeCodeViewer\app\ui-unit-desktop-1.9.0-alpha02-5488852be2e8c8908990d2539f03158.jar;C:\Program Files\ComposeCodeViewer\app\ui-util-desktop-1.9.0-alpha02-8cabca1f2697f86d58fd79f42c87512.jar
An error has occurred while processing the shared archive file.
shared class paths mismatch (hint: enable -Xlog:class+path=info to diagnose the failure)
Error occurred during initialization of VM
Unable to use shared archive.

Log during collection:

[0.004s][info][class,path] bootstrap loader class path=D:\Work\compose-multiplatform\examples\codeviewer\desktopApp\build\compose\binaries\main\app\ComposeCodeViewer\runtime\lib\modules
[0.007s][info][cds       ] trying to map D:\Work\compose-multiplatform\examples\codeviewer\desktopApp\build\compose\binaries\main\app\ComposeCodeViewer\runtime\bin\server\classes.jsa
[0.007s][info][cds       ] Opened archive D:\Work\compose-multiplatform\examples\codeviewer\desktopApp\build\compose\binaries\main\app\ComposeCodeViewer\runtime\bin\server\classes.jsa.
[0.007s][info][cds       ] Archive was created with UseCompressedOops = 1, UseCompressedClassPointers = 1
[0.007s][info][cds       ] full module graph: disabled because archive was created without full module graph
[0.007s][info][cds       ] Core region alignment: 65536
[0.007s][info][cds       ] Reserved archive_space_rs [0x0000000800000000 - 0x0000000800ac0000] (11272192) bytes
[0.007s][info][cds       ] Reserved class_space_rs   [0x0000000800c00000 - 0x0000000840c00000] (1073741824) bytes
[0.007s][info][cds       ] Windows mmap workaround: releasing archive space.
[0.007s][info][cds       ] Mapped static  region #0 at base 0x0000000800000000 top 0x0000000800460000 (ReadWrite)
[0.007s][info][cds       ] Mapped static  region #1 at base 0x0000000800460000 top 0x0000000800ac0000 (ReadOnly)
[0.007s][info][class,path] Expecting BOOT path=D:\Work\compose-multiplatform\examples\codeviewer\desktopApp\build\compose\binaries\main\app\ComposeCodeViewer\runtime\lib\modules
[0.007s][info][class,path] Expecting -Djava.class.path=D:\Work\compose-multiplatform\examples\codeviewer\\gradle\wrapper\gradle-wrapper.jar
[0.007s][info][class,path] checking shared classpath entry: D:\Work\compose-multiplatform\examples\codeviewer\desktopApp\build\compose\binaries\main\app\ComposeCodeViewer\runtime\lib\modules
[0.007s][info][class,path] ok
[0.007s][info][cds       ] optimized module handling: enabled
[0.007s][info][cds       ] full module graph: disabled
[0.008s][info][class,path] app loader class path=D:\Work\compose-multiplatform\examples\codeviewer\desktopApp\build\compose\binaries\main\app\ComposeCodeViewer\app\desktopApp-jvm-28617597e2c8b180e33b1ce49fe5eec.jar;D:\Work\compose-multiplatform\examples\codeviewer\desktopApp\build\compose\binaries\mai
n\app\ComposeCodeViewer\app\animation-core-desktop-1.9.0-alpha02-6f9a89d5ed2beb9c510ee1fccf28055.jar;D:\Work\compose-multiplatform\examples\codeviewer\desktopApp\build\compose\binaries\main\app\ComposeCodeViewer\app\animation-desktop-1.9.0-alpha02-caa3e61cbdf98d3956dd8976d11a2e8.jar;D:\Work\compose-mu
ltiplatform\examples\codeviewer\desktopApp\build\compose\binaries\main\app\ComposeCodeViewer\app\annotation-jvm-1.9.1-1d6a04b3b9847638d0529df8ef76a.jar;D:\Work\compose-multiplatform\examples\codeviewer\desktopApp\build\compose\binaries\main\app\ComposeCodeViewer\app\annotations-23.0.0-8484cd17d040d837
983323f760b2c660.jar;D:\Work\compose-multiplatform\examples\codeviewer\desktopApp\build\compose\binaries\main\app\ComposeCodeViewer\app\atomicfu-jvm-0.23.2-5e4f88ed1c37222d791f5dcadf481498.jar;D:\Work\compose-multiplatform\examples\codeviewer\desktopApp\build\compose\binaries\main\app\ComposeCodeViewe
r\app\collection-jvm-1.5.0-4421442c114a4f8c8fe587cf2d668237.jar;D:\Work\compose-multiplatform\examples\codeviewer\desktopApp\build\compose\binaries\main\app\ComposeCodeViewer\app\core-common-2.2.0-2212d240dfe1e8a7598ee117ccc316d.jar;D:\Work\compose-multiplatform\examples\codeviewer\desktopApp\build\co
mpose\binaries\main\app\ComposeCodeViewer\app\desktop-jvm-1.9.0-alpha02-d950f0d452fcdcba52d4c7bef9b82f3.jar;D:\Work\compose-multiplatform\examples\codeviewer\desktopApp\build\compose\binaries\main\app\ComposeCodeViewer\app\foundation-desktop-1.9.0-alpha02-99241c45102e545e3aeaa9bca9a6a1c7.jar;D:\Work\c
ompose-multiplatform\examples\codeviewer\desktopApp\build\compose\binaries\main\app\ComposeCodeViewer\app\foundation-layout-desktop-1.9.0-alpha02-9dd78566d6e0b8aca1b6b5dc4bd3365.jar;D:\Work\compose-multiplatform\examples\codeviewer\desktopApp\build\compose\binaries\main\app\ComposeCodeViewer\app\jbr-a
pi-1.5.0-377e771977886f74954db4278394c51.jar;D:\Work\compose-multiplatform\examples\codeviewer\desktopApp\build\compose\binaries\main\app\ComposeCodeViewer\app\jspecify-1.0.0-9133aba420d0ca3b01dbb6ae9992cf6.jar;D:\Work\compose-multiplatform\examples\codeviewer\desktopApp\build\compose\binaries\main\ap
p\ComposeCodeViewer\app\kotlin-stdlib-2.1.21-1269975f32698511a6062a4db34d0.jar;D:\Work\compose-multiplatform\examples\codeviewer\desktopApp\build\compose\binaries\main\app\ComposeCodeViewer\app\kotlin-stdlib-jdk7-2.1.21-4b5377b637f6ef7f833899a93b9862c.jar;D:\Work\compose-multiplatform\examples\codevie
wer\desktopApp\build\compose\binaries\main\app\ComposeCodeViewer\app\kotlin-stdlib-jdk8-2.1.21-affbe0196f13ecc7ad85e8d3feb4d96.jar;D:\Work\compose-multiplatform\examples\codeviewer\desktopApp\build\compose\binaries\main\app\ComposeCodeViewer\app\kotlinx-coroutines-core-jvm-1.8.0-d2920b1d99a82fafcceabc
3a48f7e0.jar;D:\Work\compose-multiplatform\examples\codeviewer\desktopApp\build\compose\binaries\main\app\ComposeCodeViewer\app\kotlinx-serialization-core-jvm-1.7.3-58c2ba33122ceccf1b35147f3db945f8.jar;D:\Work\compose-multiplatform\examples\codeviewer\desktopApp\build\compose\binaries\main\app\Compose
CodeViewer\app\library-desktop-1.9.0-alpha02-51ea3b49d1e8f140eeb3b85312a8818c.jar;D:\Work\compose-multiplatform\examples\codeviewer\desktopApp\build\compose\binaries\main\app\ComposeCodeViewer\app\lifecycle-common-jvm-2.9.0-6430746dbcfa6c26a0d997b9c76f84c.jar;D:\Work\compose-multiplatform\examples\cod
eviewer\desktopApp\build\compose\binaries\main\app\ComposeCodeViewer\app\lifecycle-runtime-compose-desktop-2.8.4-7aa4c61a74a64c3df8de58b46c853dc8.jar;D:\Work\compose-multiplatform\examples\codeviewer\desktopApp\build\compose\binaries\main\app\ComposeCodeViewer\app\lifecycle-runtime-desktop-2.9.0-e378e
d7159668cd48bbb4798fa7e25e0.jar;D:\Work\compose-multiplatform\examples\codeviewer\desktopApp\build\compose\binaries\main\app\ComposeCodeViewer\app\lifecycle-viewmodel-desktop-2.9.0-14698f2fcded304fb9c11fffdbbdab23.jar;D:\Work\compose-multiplatform\examples\codeviewer\desktopApp\build\compose\binaries\
main\app\ComposeCodeViewer\app\material-desktop-1.9.0-alpha02-1014ffb1b47abac15c8e53831a7d31c.jar;D:\Work\compose-multiplatform\examples\codeviewer\desktopApp\build\compose\binaries\main\app\ComposeCodeViewer\app\material-icons-core-desktop-1.7.3-23eaca5d2a4caa3e4077a0e9fd549d68.jar;D:\Work\compose-mu
ltiplatform\examples\codeviewer\desktopApp\build\compose\binaries\main\app\ComposeCodeViewer\app\material-icons-extended-desktop-1.7.3-848bc0f13628d5b3accc94dd3afdfa27.jar;D:\Work\compose-multiplatform\examples\codeviewer\desktopApp\build\compose\binaries\main\app\ComposeCodeViewer\app\material-ripple
-desktop-1.9.0-alpha02-a2d96a4ec0b12eca85ecde481bb3541c.jar;D:\Work\compose-multiplatform\examples\codeviewer\desktopApp\build\compose\binaries\main\app\ComposeCodeViewer\app\runtime-annotation-jvm-1.9.0-alpha03-8bc557e47732076f9cbfe7c4a3c7758.jar;D:\Work\compose-multiplatform\examples\codeviewer\desk
topApp\build\compose\binaries\main\app\ComposeCodeViewer\app\runtime-desktop-1.9.0-alpha02-2e45e1d8d13138705e71cf8cd3912ed7.jar;D:\Work\compose-multiplatform\examples\codeviewer\desktopApp\build\compose\binaries\main\app\ComposeCodeViewer\app\runtime-saveable-desktop-1.9.0-alpha02-2fc3ab80ee30c41ea977
a4e1ce24a9bb.jar;D:\Work\compose-multiplatform\examples\codeviewer\desktopApp\build\compose\binaries\main\app\ComposeCodeViewer\app\savedstate-compose-desktop-1.3.0-43308e58b734a49c9cd440838ca7ca4f.jar;D:\Work\compose-multiplatform\examples\codeviewer\desktopApp\build\compose\binaries\main\app\Compose
CodeViewer\app\savedstate-desktop-1.3.0-6eb117ede490f3573e492568dae9a0db.jar;D:\Work\compose-multiplatform\examples\codeviewer\desktopApp\build\compose\binaries\main\app\ComposeCodeViewer\app\shared-desktop-1.0-SNAPSHOT-80988bb559d7077f9feafb419bfa91e.jar;D:\Work\compose-multiplatform\examples\codevie
wer\desktopApp\build\compose\binaries\main\app\ComposeCodeViewer\app\skiko-awt-0.9.17-a269543e0218e4fa205024909691e3.jar;D:\Work\compose-multiplatform\examples\codeviewer\desktopApp\build\compose\binaries\main\app\ComposeCodeViewer\app\skiko-awt-runtime-windows-x64-0.9.17-9f41b28bd5abe7e952a648697a1c8
736.jar;D:\Work\compose-multiplatform\examples\codeviewer\desktopApp\build\compose\binaries\main\app\ComposeCodeViewer\app\ui-backhandler-desktop-1.9.0-alpha02-4d589666e8634ba6132b6d4114b3df4.jar;D:\Work\compose-multiplatform\examples\codeviewer\desktopApp\build\compose\binaries\main\app\ComposeCodeVi
ewer\app\ui-desktop-1.9.0-alpha02-cae5fea32e80c08dce444656dd316a28.jar;D:\Work\compose-multiplatform\examples\codeviewer\desktopApp\build\compose\binaries\main\app\ComposeCodeViewer\app\ui-geometry-desktop-1.9.0-alpha02-f8786bed2d564c957589f09db5f5bf21.jar;D:\Work\compose-multiplatform\examples\codevi
ewer\desktopApp\build\compose\binaries\main\app\ComposeCodeViewer\app\ui-graphics-desktop-1.9.0-alpha02-593dc6288729d452214df28b3faa4cd.jar;D:\Work\compose-multiplatform\examples\codeviewer\desktopApp\build\compose\binaries\main\app\ComposeCodeViewer\app\ui-text-desktop-1.9.0-alpha02-33d950e55ced10c8c
2d3db56efa9e75.jar;D:\Work\compose-multiplatform\examples\codeviewer\desktopApp\build\compose\binaries\main\app\ComposeCodeViewer\app\ui-tooling-preview-desktop-1.9.0-alpha02-73677496a752bcd40d3273b24dbfbbc.jar;D:\Work\compose-multiplatform\examples\codeviewer\desktopApp\build\compose\binaries\main\app\ComposeCodeViewer\app\ui-unit-desktop-1.9.0-alpha02-5488852be2e8c8908990d2539f03158.jar;D:\Work\compose-multiplatform\examples\codeviewer\desktopApp\build\compose\binaries\main\app\ComposeCodeViewer\app\ui-util-desktop-1.9.0-alpha02-8cabca1f2697f86d58fd79f42c87512.jar
[0.008s][info][class,path] opened: D:\Work\compose-multiplatform\examples\codeviewer\desktopApp\build\compose\binaries\main\app\ComposeCodeViewer\app\desktopApp-jvm-28617597e2c8b180e33b1ce49fe5eec.jar
[0.009s][info][class,path] opened: D:\Work\compose-multiplatform\examples\codeviewer\desktopApp\build\compose\binaries\main\app\ComposeCodeViewer\app\animation-core-desktop-1.9.0-alpha02-6f9a89d5ed2beb9c510ee1fccf28055.jar
[0.009s][info][class,path] opened: D:\Work\compose-multiplatform\examples\codeviewer\desktopApp\build\compose\binaries\main\app\ComposeCodeViewer\app\animation-desktop-1.9.0-alpha02-caa3e61cbdf98d3956dd8976d11a2e8.jar
[0.009s][info][class,path] opened: D:\Work\compose-multiplatform\examples\codeviewer\desktopApp\build\compose\binaries\main\app\ComposeCodeViewer\app\annotation-jvm-1.9.1-1d6a04b3b9847638d0529df8ef76a.jar
[0.009s][info][class,path] opened: D:\Work\compose-multiplatform\examples\codeviewer\desktopApp\build\compose\binaries\main\app\ComposeCodeViewer\app\annotations-23.0.0-8484cd17d040d837983323f760b2c660.jar
[0.010s][info][class,path] opened: D:\Work\compose-multiplatform\examples\codeviewer\desktopApp\build\compose\binaries\main\app\ComposeCodeViewer\app\atomicfu-jvm-0.23.2-5e4f88ed1c37222d791f5dcadf481498.jar
[0.010s][info][class,path] opened: D:\Work\compose-multiplatform\examples\codeviewer\desktopApp\build\compose\binaries\main\app\ComposeCodeViewer\app\collection-jvm-1.5.0-4421442c114a4f8c8fe587cf2d668237.jar
[0.010s][info][class,path] opened: D:\Work\compose-multiplatform\examples\codeviewer\desktopApp\build\compose\binaries\main\app\ComposeCodeViewer\app\core-common-2.2.0-2212d240dfe1e8a7598ee117ccc316d.jar
[0.010s][info][class,path] opened: D:\Work\compose-multiplatform\examples\codeviewer\desktopApp\build\compose\binaries\main\app\ComposeCodeViewer\app\desktop-jvm-1.9.0-alpha02-d950f0d452fcdcba52d4c7bef9b82f3.jar
[0.011s][info][class,path] opened: D:\Work\compose-multiplatform\examples\codeviewer\desktopApp\build\compose\binaries\main\app\ComposeCodeViewer\app\foundation-desktop-1.9.0-alpha02-99241c45102e545e3aeaa9bca9a6a1c7.jar
[0.011s][info][class,path] opened: D:\Work\compose-multiplatform\examples\codeviewer\desktopApp\build\compose\binaries\main\app\ComposeCodeViewer\app\foundation-layout-desktop-1.9.0-alpha02-9dd78566d6e0b8aca1b6b5dc4bd3365.jar
[0.011s][info][class,path] opened: D:\Work\compose-multiplatform\examples\codeviewer\desktopApp\build\compose\binaries\main\app\ComposeCodeViewer\app\jbr-api-1.5.0-377e771977886f74954db4278394c51.jar
[0.011s][info][class,path] opened: D:\Work\compose-multiplatform\examples\codeviewer\desktopApp\build\compose\binaries\main\app\ComposeCodeViewer\app\jspecify-1.0.0-9133aba420d0ca3b01dbb6ae9992cf6.jar
[0.011s][info][class,path] opened: D:\Work\compose-multiplatform\examples\codeviewer\desktopApp\build\compose\binaries\main\app\ComposeCodeViewer\app\kotlin-stdlib-2.1.21-1269975f32698511a6062a4db34d0.jar
[0.012s][info][class,path] opened: D:\Work\compose-multiplatform\examples\codeviewer\desktopApp\build\compose\binaries\main\app\ComposeCodeViewer\app\kotlin-stdlib-jdk7-2.1.21-4b5377b637f6ef7f833899a93b9862c.jar
[0.012s][info][class,path] opened: D:\Work\compose-multiplatform\examples\codeviewer\desktopApp\build\compose\binaries\main\app\ComposeCodeViewer\app\kotlin-stdlib-jdk8-2.1.21-affbe0196f13ecc7ad85e8d3feb4d96.jar
[0.012s][info][class,path] opened: D:\Work\compose-multiplatform\examples\codeviewer\desktopApp\build\compose\binaries\main\app\ComposeCodeViewer\app\kotlinx-coroutines-core-jvm-1.8.0-d2920b1d99a82fafcceabc3a48f7e0.jar
[0.012s][info][class,path] opened: D:\Work\compose-multiplatform\examples\codeviewer\desktopApp\build\compose\binaries\main\app\ComposeCodeViewer\app\kotlinx-serialization-core-jvm-1.7.3-58c2ba33122ceccf1b35147f3db945f8.jar
[0.013s][info][class,path] opened: D:\Work\compose-multiplatform\examples\codeviewer\desktopApp\build\compose\binaries\main\app\ComposeCodeViewer\app\library-desktop-1.9.0-alpha02-51ea3b49d1e8f140eeb3b85312a8818c.jar
[0.013s][info][class,path] opened: D:\Work\compose-multiplatform\examples\codeviewer\desktopApp\build\compose\binaries\main\app\ComposeCodeViewer\app\lifecycle-common-jvm-2.9.0-6430746dbcfa6c26a0d997b9c76f84c.jar
[0.013s][info][class,path] opened: D:\Work\compose-multiplatform\examples\codeviewer\desktopApp\build\compose\binaries\main\app\ComposeCodeViewer\app\lifecycle-runtime-compose-desktop-2.8.4-7aa4c61a74a64c3df8de58b46c853dc8.jar
[0.013s][info][class,path] opened: D:\Work\compose-multiplatform\examples\codeviewer\desktopApp\build\compose\binaries\main\app\ComposeCodeViewer\app\lifecycle-runtime-desktop-2.9.0-e378ed7159668cd48bbb4798fa7e25e0.jar
[0.013s][info][class,path] opened: D:\Work\compose-multiplatform\examples\codeviewer\desktopApp\build\compose\binaries\main\app\ComposeCodeViewer\app\lifecycle-viewmodel-desktop-2.9.0-14698f2fcded304fb9c11fffdbbdab23.jar
[0.014s][info][class,path] opened: D:\Work\compose-multiplatform\examples\codeviewer\desktopApp\build\compose\binaries\main\app\ComposeCodeViewer\app\material-desktop-1.9.0-alpha02-1014ffb1b47abac15c8e53831a7d31c.jar
[0.014s][info][class,path] opened: D:\Work\compose-multiplatform\examples\codeviewer\desktopApp\build\compose\binaries\main\app\ComposeCodeViewer\app\material-icons-core-desktop-1.7.3-23eaca5d2a4caa3e4077a0e9fd549d68.jar
[0.015s][info][class,path] opened: D:\Work\compose-multiplatform\examples\codeviewer\desktopApp\build\compose\binaries\main\app\ComposeCodeViewer\app\material-icons-extended-desktop-1.7.3-848bc0f13628d5b3accc94dd3afdfa27.jar
[0.015s][info][class,path] opened: D:\Work\compose-multiplatform\examples\codeviewer\desktopApp\build\compose\binaries\main\app\ComposeCodeViewer\app\material-ripple-desktop-1.9.0-alpha02-a2d96a4ec0b12eca85ecde481bb3541c.jar
[0.015s][info][class,path] opened: D:\Work\compose-multiplatform\examples\codeviewer\desktopApp\build\compose\binaries\main\app\ComposeCodeViewer\app\runtime-annotation-jvm-1.9.0-alpha03-8bc557e47732076f9cbfe7c4a3c7758.jar
[0.016s][info][class,path] opened: D:\Work\compose-multiplatform\examples\codeviewer\desktopApp\build\compose\binaries\main\app\ComposeCodeViewer\app\runtime-desktop-1.9.0-alpha02-2e45e1d8d13138705e71cf8cd3912ed7.jar
[0.016s][info][class,path] opened: D:\Work\compose-multiplatform\examples\codeviewer\desktopApp\build\compose\binaries\main\app\ComposeCodeViewer\app\runtime-saveable-desktop-1.9.0-alpha02-2fc3ab80ee30c41ea977a4e1ce24a9bb.jar
[0.016s][info][class,path] opened: D:\Work\compose-multiplatform\examples\codeviewer\desktopApp\build\compose\binaries\main\app\ComposeCodeViewer\app\savedstate-compose-desktop-1.3.0-43308e58b734a49c9cd440838ca7ca4f.jar
[0.016s][info][class,path] opened: D:\Work\compose-multiplatform\examples\codeviewer\desktopApp\build\compose\binaries\main\app\ComposeCodeViewer\app\savedstate-desktop-1.3.0-6eb117ede490f3573e492568dae9a0db.jar
[0.016s][info][class,path] opened: D:\Work\compose-multiplatform\examples\codeviewer\desktopApp\build\compose\binaries\main\app\ComposeCodeViewer\app\shared-desktop-1.0-SNAPSHOT-80988bb559d7077f9feafb419bfa91e.jar
[0.017s][info][class,path] opened: D:\Work\compose-multiplatform\examples\codeviewer\desktopApp\build\compose\binaries\main\app\ComposeCodeViewer\app\skiko-awt-0.9.17-a269543e0218e4fa205024909691e3.jar
[0.017s][info][class,path] opened: D:\Work\compose-multiplatform\examples\codeviewer\desktopApp\build\compose\binaries\main\app\ComposeCodeViewer\app\skiko-awt-runtime-windows-x64-0.9.17-9f41b28bd5abe7e952a648697a1c8736.jar
[0.017s][info][class,path] opened: D:\Work\compose-multiplatform\examples\codeviewer\desktopApp\build\compose\binaries\main\app\ComposeCodeViewer\app\ui-backhandler-desktop-1.9.0-alpha02-4d589666e8634ba6132b6d4114b3df4.jar
[0.017s][info][class,path] opened: D:\Work\compose-multiplatform\examples\codeviewer\desktopApp\build\compose\binaries\main\app\ComposeCodeViewer\app\ui-desktop-1.9.0-alpha02-cae5fea32e80c08dce444656dd316a28.jar
[0.018s][info][class,path] opened: D:\Work\compose-multiplatform\examples\codeviewer\desktopApp\build\compose\binaries\main\app\ComposeCodeViewer\app\ui-geometry-desktop-1.9.0-alpha02-f8786bed2d564c957589f09db5f5bf21.jar
[0.018s][info][class,path] opened: D:\Work\compose-multiplatform\examples\codeviewer\desktopApp\build\compose\binaries\main\app\ComposeCodeViewer\app\ui-graphics-desktop-1.9.0-alpha02-593dc6288729d452214df28b3faa4cd.jar
[0.018s][info][class,path] opened: D:\Work\compose-multiplatform\examples\codeviewer\desktopApp\build\compose\binaries\main\app\ComposeCodeViewer\app\ui-text-desktop-1.9.0-alpha02-33d950e55ced10c8c2d3db56efa9e75.jar
[0.018s][info][class,path] opened: D:\Work\compose-multiplatform\examples\codeviewer\desktopApp\build\compose\binaries\main\app\ComposeCodeViewer\app\ui-tooling-preview-desktop-1.9.0-alpha02-73677496a752bcd40d3273b24dbfbbc.jar
[0.018s][info][class,path] opened: D:\Work\compose-multiplatform\examples\codeviewer\desktopApp\build\compose\binaries\main\app\ComposeCodeViewer\app\ui-unit-desktop-1.9.0-alpha02-5488852be2e8c8908990d2539f03158.jar
[0.019s][info][class,path] opened: D:\Work\compose-multiplatform\examples\codeviewer\desktopApp\build\compose\binaries\main\app\ComposeCodeViewer\app\ui-util-desktop-1.9.0-alpha02-8cabca1f2697f86d58fd79f42c87512.jar
[0.040s][info][class,path] add boot shared path (jrt) D:\Work\compose-multiplatform\examples\codeviewer\desktopApp\build\compose\binaries\main\app\ComposeCodeViewer\runtime\lib\modules
[0.040s][info][class,path] add app shared path (jar) D:\Work\compose-multiplatform\examples\codeviewer\desktopApp\build\compose\binaries\main\app\ComposeCodeViewer\app\desktopApp-jvm-28617597e2c8b180e33b1ce49fe5eec.jar
[0.040s][info][class,path] add app shared path (jar) D:\Work\compose-multiplatform\examples\codeviewer\desktopApp\build\compose\binaries\main\app\ComposeCodeViewer\app\animation-core-desktop-1.9.0-alpha02-6f9a89d5ed2beb9c510ee1fccf28055.jar
[0.040s][info][class,path] add app shared path (jar) D:\Work\compose-multiplatform\examples\codeviewer\desktopApp\build\compose\binaries\main\app\ComposeCodeViewer\app\animation-desktop-1.9.0-alpha02-caa3e61cbdf98d3956dd8976d11a2e8.jar
[0.040s][info][class,path] add app shared path (jar) D:\Work\compose-multiplatform\examples\codeviewer\desktopApp\build\compose\binaries\main\app\ComposeCodeViewer\app\annotation-jvm-1.9.1-1d6a04b3b9847638d0529df8ef76a.jar
[0.040s][info][class,path] add app shared path (jar) D:\Work\compose-multiplatform\examples\codeviewer\desktopApp\build\compose\binaries\main\app\ComposeCodeViewer\app\annotations-23.0.0-8484cd17d040d837983323f760b2c660.jar
[0.040s][info][class,path] add app shared path (jar) D:\Work\compose-multiplatform\examples\codeviewer\desktopApp\build\compose\binaries\main\app\ComposeCodeViewer\app\atomicfu-jvm-0.23.2-5e4f88ed1c37222d791f5dcadf481498.jar
[0.040s][info][class,path] add app shared path (jar) D:\Work\compose-multiplatform\examples\codeviewer\desktopApp\build\compose\binaries\main\app\ComposeCodeViewer\app\collection-jvm-1.5.0-4421442c114a4f8c8fe587cf2d668237.jar
[0.040s][info][class,path] add app shared path (jar) D:\Work\compose-multiplatform\examples\codeviewer\desktopApp\build\compose\binaries\main\app\ComposeCodeViewer\app\core-common-2.2.0-2212d240dfe1e8a7598ee117ccc316d.jar
[0.040s][info][class,path] add app shared path (jar) D:\Work\compose-multiplatform\examples\codeviewer\desktopApp\build\compose\binaries\main\app\ComposeCodeViewer\app\desktop-jvm-1.9.0-alpha02-d950f0d452fcdcba52d4c7bef9b82f3.jar
[0.040s][info][class,path] add app shared path (jar) D:\Work\compose-multiplatform\examples\codeviewer\desktopApp\build\compose\binaries\main\app\ComposeCodeViewer\app\foundation-desktop-1.9.0-alpha02-99241c45102e545e3aeaa9bca9a6a1c7.jar
[0.040s][info][class,path] add app shared path (jar) D:\Work\compose-multiplatform\examples\codeviewer\desktopApp\build\compose\binaries\main\app\ComposeCodeViewer\app\foundation-layout-desktop-1.9.0-alpha02-9dd78566d6e0b8aca1b6b5dc4bd3365.jar
[0.040s][info][class,path] add app shared path (jar) D:\Work\compose-multiplatform\examples\codeviewer\desktopApp\build\compose\binaries\main\app\ComposeCodeViewer\app\jbr-api-1.5.0-377e771977886f74954db4278394c51.jar
[0.040s][info][class,path] add app shared path (jar) D:\Work\compose-multiplatform\examples\codeviewer\desktopApp\build\compose\binaries\main\app\ComposeCodeViewer\app\jspecify-1.0.0-9133aba420d0ca3b01dbb6ae9992cf6.jar
[0.040s][info][class,path] add app shared path (jar) D:\Work\compose-multiplatform\examples\codeviewer\desktopApp\build\compose\binaries\main\app\ComposeCodeViewer\app\kotlin-stdlib-2.1.21-1269975f32698511a6062a4db34d0.jar
[0.040s][info][class,path] add app shared path (jar) D:\Work\compose-multiplatform\examples\codeviewer\desktopApp\build\compose\binaries\main\app\ComposeCodeViewer\app\kotlin-stdlib-jdk7-2.1.21-4b5377b637f6ef7f833899a93b9862c.jar
[0.041s][info][class,path] add app shared path (jar) D:\Work\compose-multiplatform\examples\codeviewer\desktopApp\build\compose\binaries\main\app\ComposeCodeViewer\app\kotlin-stdlib-jdk8-2.1.21-affbe0196f13ecc7ad85e8d3feb4d96.jar
[0.041s][info][class,path] add app shared path (jar) D:\Work\compose-multiplatform\examples\codeviewer\desktopApp\build\compose\binaries\main\app\ComposeCodeViewer\app\kotlinx-coroutines-core-jvm-1.8.0-d2920b1d99a82fafcceabc3a48f7e0.jar
[0.041s][info][class,path] add app shared path (jar) D:\Work\compose-multiplatform\examples\codeviewer\desktopApp\build\compose\binaries\main\app\ComposeCodeViewer\app\kotlinx-serialization-core-jvm-1.7.3-58c2ba33122ceccf1b35147f3db945f8.jar
[0.041s][info][class,path] add app shared path (jar) D:\Work\compose-multiplatform\examples\codeviewer\desktopApp\build\compose\binaries\main\app\ComposeCodeViewer\app\library-desktop-1.9.0-alpha02-51ea3b49d1e8f140eeb3b85312a8818c.jar
[0.041s][info][class,path] add app shared path (jar) D:\Work\compose-multiplatform\examples\codeviewer\desktopApp\build\compose\binaries\main\app\ComposeCodeViewer\app\lifecycle-common-jvm-2.9.0-6430746dbcfa6c26a0d997b9c76f84c.jar
[0.041s][info][class,path] add app shared path (jar) D:\Work\compose-multiplatform\examples\codeviewer\desktopApp\build\compose\binaries\main\app\ComposeCodeViewer\app\lifecycle-runtime-compose-desktop-2.8.4-7aa4c61a74a64c3df8de58b46c853dc8.jar
[0.041s][info][class,path] add app shared path (jar) D:\Work\compose-multiplatform\examples\codeviewer\desktopApp\build\compose\binaries\main\app\ComposeCodeViewer\app\lifecycle-runtime-desktop-2.9.0-e378ed7159668cd48bbb4798fa7e25e0.jar
[0.041s][info][class,path] add app shared path (jar) D:\Work\compose-multiplatform\examples\codeviewer\desktopApp\build\compose\binaries\main\app\ComposeCodeViewer\app\lifecycle-viewmodel-desktop-2.9.0-14698f2fcded304fb9c11fffdbbdab23.jar
[0.041s][info][class,path] add app shared path (jar) D:\Work\compose-multiplatform\examples\codeviewer\desktopApp\build\compose\binaries\main\app\ComposeCodeViewer\app\material-desktop-1.9.0-alpha02-1014ffb1b47abac15c8e53831a7d31c.jar
[0.041s][info][class,path] add app shared path (jar) D:\Work\compose-multiplatform\examples\codeviewer\desktopApp\build\compose\binaries\main\app\ComposeCodeViewer\app\material-icons-core-desktop-1.7.3-23eaca5d2a4caa3e4077a0e9fd549d68.jar
[0.041s][info][class,path] add app shared path (jar) D:\Work\compose-multiplatform\examples\codeviewer\desktopApp\build\compose\binaries\main\app\ComposeCodeViewer\app\material-icons-extended-desktop-1.7.3-848bc0f13628d5b3accc94dd3afdfa27.jar
[0.041s][info][class,path] add app shared path (jar) D:\Work\compose-multiplatform\examples\codeviewer\desktopApp\build\compose\binaries\main\app\ComposeCodeViewer\app\material-ripple-desktop-1.9.0-alpha02-a2d96a4ec0b12eca85ecde481bb3541c.jar
[0.041s][info][class,path] add app shared path (jar) D:\Work\compose-multiplatform\examples\codeviewer\desktopApp\build\compose\binaries\main\app\ComposeCodeViewer\app\runtime-annotation-jvm-1.9.0-alpha03-8bc557e47732076f9cbfe7c4a3c7758.jar
[0.041s][info][class,path] add app shared path (jar) D:\Work\compose-multiplatform\examples\codeviewer\desktopApp\build\compose\binaries\main\app\ComposeCodeViewer\app\runtime-desktop-1.9.0-alpha02-2e45e1d8d13138705e71cf8cd3912ed7.jar
[0.041s][info][class,path] add app shared path (jar) D:\Work\compose-multiplatform\examples\codeviewer\desktopApp\build\compose\binaries\main\app\ComposeCodeViewer\app\runtime-saveable-desktop-1.9.0-alpha02-2fc3ab80ee30c41ea977a4e1ce24a9bb.jar
[0.041s][info][class,path] add app shared path (jar) D:\Work\compose-multiplatform\examples\codeviewer\desktopApp\build\compose\binaries\main\app\ComposeCodeViewer\app\savedstate-compose-desktop-1.3.0-43308e58b734a49c9cd440838ca7ca4f.jar
[0.041s][info][class,path] add app shared path (jar) D:\Work\compose-multiplatform\examples\codeviewer\desktopApp\build\compose\binaries\main\app\ComposeCodeViewer\app\savedstate-desktop-1.3.0-6eb117ede490f3573e492568dae9a0db.jar
[0.041s][info][class,path] add app shared path (jar) D:\Work\compose-multiplatform\examples\codeviewer\desktopApp\build\compose\binaries\main\app\ComposeCodeViewer\app\shared-desktop-1.0-SNAPSHOT-80988bb559d7077f9feafb419bfa91e.jar
[0.041s][info][class,path] add app shared path (jar) D:\Work\compose-multiplatform\examples\codeviewer\desktopApp\build\compose\binaries\main\app\ComposeCodeViewer\app\skiko-awt-0.9.17-a269543e0218e4fa205024909691e3.jar
[0.041s][info][class,path] add app shared path (jar) D:\Work\compose-multiplatform\examples\codeviewer\desktopApp\build\compose\binaries\main\app\ComposeCodeViewer\app\skiko-awt-runtime-windows-x64-0.9.17-9f41b28bd5abe7e952a648697a1c8736.jar
[0.041s][info][class,path] add app shared path (jar) D:\Work\compose-multiplatform\examples\codeviewer\desktopApp\build\compose\binaries\main\app\ComposeCodeViewer\app\ui-backhandler-desktop-1.9.0-alpha02-4d589666e8634ba6132b6d4114b3df4.jar
[0.041s][info][class,path] add app shared path (jar) D:\Work\compose-multiplatform\examples\codeviewer\desktopApp\build\compose\binaries\main\app\ComposeCodeViewer\app\ui-desktop-1.9.0-alpha02-cae5fea32e80c08dce444656dd316a28.jar
[0.041s][info][class,path] add app shared path (jar) D:\Work\compose-multiplatform\examples\codeviewer\desktopApp\build\compose\binaries\main\app\ComposeCodeViewer\app\ui-geometry-desktop-1.9.0-alpha02-f8786bed2d564c957589f09db5f5bf21.jar
[0.041s][info][class,path] add app shared path (jar) D:\Work\compose-multiplatform\examples\codeviewer\desktopApp\build\compose\binaries\main\app\ComposeCodeViewer\app\ui-graphics-desktop-1.9.0-alpha02-593dc6288729d452214df28b3faa4cd.jar
[0.041s][info][class,path] add app shared path (jar) D:\Work\compose-multiplatform\examples\codeviewer\desktopApp\build\compose\binaries\main\app\ComposeCodeViewer\app\ui-text-desktop-1.9.0-alpha02-33d950e55ced10c8c2d3db56efa9e75.jar
[0.041s][info][class,path] add app shared path (jar) D:\Work\compose-multiplatform\examples\codeviewer\desktopApp\build\compose\binaries\main\app\ComposeCodeViewer\app\ui-tooling-preview-desktop-1.9.0-alpha02-73677496a752bcd40d3273b24dbfbbc.jar
[0.041s][info][class,path] add app shared path (jar) D:\Work\compose-multiplatform\examples\codeviewer\desktopApp\build\compose\binaries\main\app\ComposeCodeViewer\app\ui-unit-desktop-1.9.0-alpha02-5488852be2e8c8908990d2539f03158.jar
[0.041s][info][class,path] add app shared path (jar) D:\Work\compose-multiplatform\examples\codeviewer\desktopApp\build\compose\binaries\main\app\ComposeCodeViewer\app\ui-util-desktop-1.9.0-alpha02-8cabca1f2697f86d58fd79f42c87512.jar
[4.663s][info][cds       ] Regenerate MethodHandle Holder classes...
[4.709s][info][cds       ] Checking class java/lang/invoke/BoundMethodHandle$Species_LJ
[4.709s][info][cds       ] Skip regenerating for shared  java/lang/invoke/BoundMethodHandle$Species_LJ
[4.709s][info][cds       ] Checking class java/lang/invoke/BoundMethodHandle$Species_LL
[4.709s][info][cds       ] Skip regenerating for shared  java/lang/invoke/BoundMethodHandle$Species_LL
[4.709s][info][cds       ] Checking class java/lang/invoke/BoundMethodHandle$Species_LLJ
[4.709s][info][cds       ] Skip regenerating for shared  java/lang/invoke/BoundMethodHandle$Species_LLJ
[4.709s][info][cds       ] Checking class java/lang/invoke/BoundMethodHandle$Species_LLL
[4.709s][info][cds       ] Skip regenerating for shared  java/lang/invoke/BoundMethodHandle$Species_LLL
[4.709s][info][cds       ] Checking class java/lang/invoke/BoundMethodHandle$Species_LLLJ
[4.709s][info][cds       ] Skip regenerating for shared  java/lang/invoke/BoundMethodHandle$Species_LLLJ
[4.709s][info][cds       ] Checking class java/lang/invoke/BoundMethodHandle$Species_LLLL
[4.709s][info][cds       ] Skip regenerating for shared  java/lang/invoke/BoundMethodHandle$Species_LLLL
[4.709s][info][cds       ] Checking class java/lang/invoke/BoundMethodHandle$Species_LLLLL
[4.709s][info][cds       ] Skip regenerating for shared  java/lang/invoke/BoundMethodHandle$Species_LLLLL
[4.709s][info][cds       ] Checking class java/lang/invoke/DelegatingMethodHandle$Holder
[4.710s][info][cds       ] Checking class java/lang/invoke/DirectMethodHandle$Holder
[4.711s][info][cds       ] Checking class java/lang/invoke/Invokers$Holder
[4.711s][info][cds       ] Checking class java/lang/invoke/LambdaForm$Holder
[4.711s][info][cds       ] Regenerate MethodHandle Holder classes...done
[4.827s][info][cds       ] Gathering all archivable objects ... 
[4.827s][info][cds       ] Gathering classes and symbols ... 
[5.154s][info][cds       ] _estimated_hashtable_bytes = 703472 + 158152 = 861624
[5.154s][info][cds       ] _estimated_metaspaceobj_bytes = 28062200
[5.154s][info][cds       ] total estimate bytes = 29054896
[5.154s][info][cds       ] Reserved output buffer space at 0x00000245666e0000 [29097984 bytes]
[5.154s][info][cds       ] Allocating RW objects ...
[5.162s][info][cds       ] done (63039 objects)
[5.162s][info][cds       ] Allocating RO objects ...
[5.175s][info][cds       ] done (156611 objects)
[5.175s][info][cds       ] Relocating embedded pointers in core regions ...
[5.219s][info][cds       ] Relocating external roots ...
[5.222s][info][cds       ] done
[5.222s][info][cds       ] MetaspaceObjs estimate = 28062200 used = 28062200; diff = 0 bytes
[5.250s][info][cds       ] Hashtables estimate = 861624 used = 836144; diff = 25480 bytes
[5.267s][info][cds       ] Make classes shareable
[5.279s][info][cds       ] Number of classes 3998
[5.279s][info][cds       ]     instance classes   =  3998
[5.279s][info][cds       ]       boot             =  1001
[5.279s][info][cds       ]       app              =  2997
[5.279s][info][cds       ]       platform         =     0
[5.279s][info][cds       ]       unregistered     =     0
[5.279s][info][cds       ]       (hidden)         =   566
[5.279s][info][cds       ]       (unlinked)       =     0
[5.279s][info][cds       ]     obj array classes  =     0
[5.279s][info][cds       ]     type array classes =     0
[5.279s][info][cds       ]                symbols = 76387
[5.279s][info][cds       ] Adjust lambda proxy class dictionary
[5.282s][info][cds       ] Dumping shared data to file:
[5.282s][info][cds       ]    D:\Work\compose-multiplatform\examples\codeviewer\desktopApp\build\compose\binaries\main\app\ComposeCodeViewer\app/app.jsa
[5.287s][info][cds       ] Shared file region (rw )  0:  9869768 bytes, addr 0x0000000800ac0000 file offset 0x00010000 crc 0x33aea85f
[5.298s][info][cds       ] Shared file region (ro )  1: 19028576 bytes, addr 0x0000000801430000 file offset 0x00980000 crc 0x5cfe4ede
[5.341s][info][cds       ] Shared file region (bm )  2:   451952 bytes, addr 0x0000000000000000 file offset 0x01bb0000 crc 0x78b2526d

It seems the collected classpath is with the absolute path D:\Work\compose-multiplatform\examples\codeviewer\

Copy link
Collaborator

@igordmn igordmn Jul 7, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[0.024s][info][class,path] checking shared classpath entry: C:\Users\msash\IdeaProjects\compose-multiplatform\examples\codeviewer\desktopApp\build\compose\binaries\main-release\app\ComposeCodeViewer\app\desktopApp-jvm.jar
[0.025s][warning][cds ] Required classpath entry does not exist: C:\Users\msash\IdeaProjects\compose-multiplatform\examples\codeviewer\desktopApp\build\compose\binaries\main-release\app\ComposeCodeViewer\app\desktopApp-jvm.jar

Seems like it is not only logging, it actually tries accessing the hardcoded path.

Copy link
Collaborator

@igordmn igordmn Jul 8, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I run it on JDK 19.

It looks like it was fixed in https://bugs.openjdk.org/browse/JDK-8279366 in JDK 20

I checked on JBR 21, and it works.

I suggest to revert the user.dir fix, and add a JDK check

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Still, the first start is 2 sec, only the second start is 0.5 sec, which indicates that cds works.

The first start logging says that CDS should also work 🤔

Copy link
Collaborator

@igordmn igordmn Jul 8, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I tested multiple first runs of installed app:

  • None: average 2150
  • Prebuilt 1900

Looks like there are some other factors that slow down the run of an installed app, comparing to just running createReleaseDistributable

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

are some other factors that slow down

It was an antivirus (the Windows built-in one). Disabling real-time protection makes the first run the same as the next ones.

Worth to mention that in the docs

@m-sasha m-sasha requested review from igordmn and terrakok July 2, 2025 17:19
Copy link
Member

@terrakok terrakok left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

let's change the logging logic as Igor asked

* the app's classes.
*/
@Suppress("unused")
val Prebuild = object : AppCdsMode("Prebuild") {
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I see that ./gradlew packageMsi packages app.jsa, but it doesn't work. The startup time is:

first run - 2.5 sec (as in the case of Auto mode, when it is slow down the first execution)
second - 0.8 sec (as in the case of None mode)

I expect it to be 0.4 sec, as I see in createDistributable

* of the first execution, which also takes a little longer.
*/
@Suppress("unused")
val Auto = object : AppCdsMode("Auto") {
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

But not sure that Auto worth the trouble finding a way to write C:\ProgramData\ComposeCodeViewer (this is the right path for such files)

* of the first execution, which also takes a little longer.
*/
@Suppress("unused")
val Auto = object : AppCdsMode("Auto") {
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Considering all the cons, including the critical one with the firewall, it looks not suitable for production. But for debugging, it seems also not needed.

So, because there is no use case, it looks like it is better to remove this mode?

@m-sasha m-sasha requested a review from igordmn July 4, 2025 21:57
@@ -0,0 +1,202 @@
package org.jetbrains.compose.desktop.application.dsl
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

After merging the PR, please close the user PR #2080

* the app's classes.
*/
@Suppress("unused")
val Prebuild = object : AppCdsMode("Prebuild") {
Copy link
Collaborator

@igordmn igordmn Jul 8, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I run it on JDK 19.

It looks like it was fixed in https://bugs.openjdk.org/browse/JDK-8279366 in JDK 20

I checked on JBR 21, and it works.

I suggest to revert the user.dir fix, and add a JDK check

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.

3 participants