-
Notifications
You must be signed in to change notification settings - Fork 1.3k
Support for AppCDS #5336
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: master
Are you sure you want to change the base?
Support for AppCDS #5336
Conversation
Please look at this carefully, as I'm far from an expert in Gradle, and may (even probably) have done something the wrong way. |
Any idea why it fails? The exception is
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. |
Ok, so this test fails on master too: #5337 |
There was a problem hiding this 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 |
There was a problem hiding this comment.
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
There was a problem hiding this comment.
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.
There was a problem hiding this comment.
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?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Nobody reads the javadoc :)
There was a problem hiding this comment.
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?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
There was a problem hiding this comment.
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.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Removed the logging
param.
...gins/compose/src/main/kotlin/org/jetbrains/compose/desktop/application/dsl/AppCdsSettings.kt
Outdated
Show resolved
Hide resolved
...gins/compose/src/main/kotlin/org/jetbrains/compose/desktop/application/dsl/AppCdsSettings.kt
Outdated
Show resolved
Hide resolved
...in/kotlin/org/jetbrains/compose/desktop/application/tasks/AbstractCreateAppCdsArchiveTask.kt
Outdated
Show resolved
Hide resolved
...in/kotlin/org/jetbrains/compose/desktop/application/tasks/AbstractCreateAppCdsArchiveTask.kt
Outdated
Show resolved
Hide resolved
cda595e
to
dcb0db9
Compare
7f126a1
to
c5baf48
Compare
...mpose/src/test/kotlin/org/jetbrains/compose/test/tests/integration/DesktopApplicationTest.kt
Show resolved
Hide resolved
* Whether to ask the JVM to log AppCDS-related actions. | ||
*/ | ||
@Suppress("MemberVisibilityCanBePrivate") | ||
var logging: Boolean = false |
There was a problem hiding this comment.
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.
gradle-plugins/compose/src/test/test-projects/application/appCds/build.gradle.kts
Outdated
Show resolved
Hide resolved
...gins/compose/src/main/kotlin/org/jetbrains/compose/desktop/application/dsl/AppCdsSettings.kt
Show resolved
Hide resolved
* of the first execution, which also takes a little longer. | ||
*/ | ||
@Suppress("unused") | ||
val Auto = object : AppCdsMode("Auto") { |
There was a problem hiding this comment.
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?
There was a problem hiding this comment.
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.
There was a problem hiding this comment.
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
There was a problem hiding this comment.
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
There was a problem hiding this comment.
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)
There was a problem hiding this comment.
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.
There was a problem hiding this comment.
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
There was a problem hiding this comment.
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...
There was a problem hiding this comment.
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.
There was a problem hiding this comment.
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.
...gins/compose/src/main/kotlin/org/jetbrains/compose/desktop/application/dsl/AppCdsSettings.kt
Show resolved
Hide resolved
* the app's classes. | ||
*/ | ||
@Suppress("unused") | ||
val Prebuild = object : AppCdsMode("Prebuild") { |
There was a problem hiding this comment.
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
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Fixed.
There was a problem hiding this comment.
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
There was a problem hiding this comment.
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.
There was a problem hiding this comment.
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\
There was a problem hiding this comment.
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.
There was a problem hiding this comment.
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
There was a problem hiding this comment.
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 🤔
There was a problem hiding this comment.
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
There was a problem hiding this comment.
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
...gins/compose/src/main/kotlin/org/jetbrains/compose/desktop/application/dsl/AppCdsSettings.kt
Show resolved
Hide resolved
...gins/compose/src/main/kotlin/org/jetbrains/compose/desktop/application/dsl/AppCdsSettings.kt
Show resolved
Hide resolved
…n process of AppCdsMode.Prebuild
…sults in identical outputs
…hen running the app to create the archive in Prebuild mode.
...se/src/main/kotlin/org/jetbrains/compose/desktop/application/dsl/JvmApplicationBuildTypes.kt
Outdated
Show resolved
Hide resolved
There was a problem hiding this 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
...gins/compose/src/main/kotlin/org/jetbrains/compose/desktop/application/dsl/AppCdsSettings.kt
Show resolved
Hide resolved
* the app's classes. | ||
*/ | ||
@Suppress("unused") | ||
val Prebuild = object : AppCdsMode("Prebuild") { |
There was a problem hiding this comment.
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
...gins/compose/src/main/kotlin/org/jetbrains/compose/desktop/application/dsl/AppCdsSettings.kt
Show resolved
Hide resolved
* of the first execution, which also takes a little longer. | ||
*/ | ||
@Suppress("unused") | ||
val Auto = object : AppCdsMode("Auto") { |
There was a problem hiding this comment.
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)
...gins/compose/src/main/kotlin/org/jetbrains/compose/desktop/application/dsl/AppCdsSettings.kt
Show resolved
Hide resolved
* of the first execution, which also takes a little longer. | ||
*/ | ||
@Suppress("unused") | ||
val Auto = object : AppCdsMode("Auto") { |
There was a problem hiding this comment.
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?
...gins/compose/src/main/kotlin/org/jetbrains/compose/desktop/application/dsl/AppCdsSettings.kt
Show resolved
Hide resolved
...gins/compose/src/main/kotlin/org/jetbrains/compose/desktop/application/dsl/AppCdsSettings.kt
Show resolved
Hide resolved
...gins/compose/src/main/kotlin/org/jetbrains/compose/desktop/application/dsl/AppCdsSettings.kt
Show resolved
Hide resolved
@@ -0,0 +1,202 @@ | |||
package org.jetbrains.compose.desktop.application.dsl |
There was a problem hiding this comment.
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") { |
There was a problem hiding this comment.
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
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.There are currently two modes:
Auto
In this mode, the archive is created when the end-user first runs the app.
Advantages:
Drawbacks:
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.
directory at runtime.
Prebuild
In this mode, the gradle plugin runs the app to create the archive.
Advantages:
Drawbacks:
distributable.
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:
We could also add some support in Compose when running with this flag.
isComposeIdle
state, so the app can wait on that.isComposeIdle
becomestrue
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