Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
20 commits
Select commit Hold shift + click to select a range
c815098
Implemented support for App CDS.
m-sasha Jun 17, 2025
6aad554
Address PR feedback.
m-sasha Jun 19, 2025
a8e376f
Change AbstractCreateAppCdsArchiveTask.dependencyFiles to be a regula…
m-sasha Jun 20, 2025
ef4b437
Added AppCDS tests.
m-sasha Jun 21, 2025
c55d5c4
Moved `appCds` block into `nativeDistributions`
m-sasha Jul 1, 2025
6154135
Removed `logging` param from `appCds` block.
m-sasha Jul 1, 2025
5ed97e1
`createDistributable` task now depends on `createAppCdsArchive`.
m-sasha Jul 2, 2025
7599528
Documented more drawbacks of AppCdsMode.Auto, and the archive creatio…
m-sasha Jul 2, 2025
7e85ae7
Add app.jsa to packaged files
m-sasha Jul 2, 2025
ac1c2e8
Set zip entry time when transforming jar, so that identical inputs re…
m-sasha Jul 2, 2025
34ef580
Add more documentation to AppCdsMode.Auto
m-sasha Jul 2, 2025
44330bd
Add `-Xlog:cds` JVM argument when building in non-release mode, and w…
m-sasha Jul 2, 2025
216b85a
Add `exitAppOnCdsFailure` parameter to `AppCdsConfiguration`
m-sasha Jul 2, 2025
9b58449
Added documentation on what AppCDS is.
m-sasha Jul 3, 2025
3f5edad
Added sample code to detect and react to `compose.appcds.create-archive`
m-sasha Jul 4, 2025
39abf04
Move `appCds` block into buildType
m-sasha Jul 4, 2025
e18e47d
Run app with relative classpath
m-sasha Jul 8, 2025
a660def
Build all platforms from app image.
m-sasha Jul 8, 2025
79437f9
Don't set `-Xshare:on` if AppCDS mode is None.
m-sasha Jul 9, 2025
7176c6c
Use `-XX:+NoClasspathInArchive`
m-sasha Jul 22, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,218 @@
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


import org.gradle.api.file.Directory
import org.gradle.api.file.RegularFile
import org.jetbrains.compose.internal.utils.packagedAppJarFilesDir
import java.io.Serializable

/**
* The configuration of AppCDS for the native distribution.
*
* AppCDS is a JVM mechanism that allows to significantly speed up application
* startup by creating an archive of the classes it uses that can be loaded
* and used much faster than class files.
*/
abstract class AppCdsConfiguration {
/**
* The AppCDS mode to use.
*/
var mode: AppCdsMode = AppCdsMode.None

/**
* Whether to print AppCDS-related messages at application runtime.
*/
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.


/**
* Whether to fail running the app if unable to load the AppCDS archive.
*/
var exitAppOnCdsFailure: Boolean = false
}

/**
* Returns the AppCDS-related arguments to pass the JVM when running the app.
*/
internal fun AppCdsConfiguration.runtimeJvmArgs() = buildList {
addAll(mode.runtimeJvmArgs())
if (exitAppOnCdsFailure && (mode != AppCdsMode.None)) {
add("-Xshare:on")
}
if (logging) {
add("-Xlog:cds")
}
}

/**
* The mode of use of AppCDS.
*/
abstract class AppCdsMode(val name: String) : Serializable {

/**
* The minimum JDK version for which this mode is supported.
*/
internal open val minJdkVersion: Int? = null

/**
* Whether to generate a classes.jsa archive for the JRE classes.
*/
internal abstract val generateJreClassesArchive: Boolean

/**
* Returns whether this mode creates an archive of app classes at build time.
*/
internal open val generateAppClassesArchive: Boolean get() = false

/**
* The arguments to pass to the JVM when running the app to create
* the archive for the app's class files.
*
* This will only be called if [generateAppClassesArchive] is `true`.
*/
internal open fun appClassesArchiveCreationJvmArgs(): List<String> =
error("AppCdsMode '$this' does not create an archive")

/**
* Returns the app's classes archive file, given the root directory of
* the packaged app.
*/
internal open fun appClassesArchiveFile(packagedAppRootDir: Directory): RegularFile =
error("AppCdsMode '$this' does not create an archive")

/**
* The arguments to pass to the JVM when running the final app.
*/
internal abstract fun runtimeJvmArgs(): List<String>

/**
* Checks whether this mode is compatible with the given JDK major version.
* Throws an exception if not.
*/
internal open fun checkJdkCompatibility(jdkMajorVersion: Int, jdkVendor: String) {
val minMajorJdkVersion = minJdkVersion ?: return
if (jdkMajorVersion < minMajorJdkVersion) {
error(
"AppCdsMode '$this' is not supported on JDK earlier than" +
" $minMajorJdkVersion; current is $jdkMajorVersion"
)
}
}

override fun toString() = name

companion object {

/**
* The name of the AppCDS archive file.
*/
private const val ARCHIVE_NAME = "app.jsa"

/**
* The AppCDS archive file.
*/
internal const val ARCHIVE_FILE_ARGUMENT = "\$APPDIR/$ARCHIVE_NAME"

/**
* AppCDS is not used.
*/
val None = object : AppCdsMode("None") {
override val generateJreClassesArchive: Boolean get() = false
override fun runtimeJvmArgs() = emptyList<String>()
}

/**
* AppCDS is used via a dynamic shared archive created automatically
* when the app is run (using `-XX:+AutoCreateSharedArchive`).
*
* 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. Due to this, `Auto` mode is mostly recommended
* only to experiment and see how fast your app starts up with AppCDS.
* In production, we recommend [Prebuild] mode.
*
*/
@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.

override val minJdkVersion = 19
override val generateJreClassesArchive: Boolean get() = true
override fun runtimeJvmArgs() =
listOf(
"-XX:SharedArchiveFile=$ARCHIVE_FILE_ARGUMENT",
"-XX:+AutoCreateSharedArchive"
)
}

/**
* AppCDS is used via a dynamic shared archive created by executing
* the app before packaging (using `-XX:ArchiveClassesAtExit`).
*
* When using this mode, the app will be run during the creation of
* the distributable. In this run, a system property
* `compose.appcds.create-archive` will be set to the value `true`.
* The app should "exercise" itself and cause the loading of all
* the classes that should be written into the AppCDS archive. It
* should then shut down in order to let the build process continue.
*
* For example:
* ```
* application {
* ...
* if (System.getProperty("compose.appcds.create-archive") == "true") {
* LaunchedEffect(Unit) {
* delay(10.seconds) // Or a custom event indicating startup finished
* exitApplication()
* }
* }
* }
* ```
*
* Advantages:
* - The first run of the distributed app is fast too.
*
* Drawbacks:
* - Requires JDK 21 or later.
* - 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.
*/
@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

override val minJdkVersion = 21
override fun checkJdkCompatibility(jdkMajorVersion: Int, jdkVendor: String) {
super.checkJdkCompatibility(jdkMajorVersion, jdkVendor)
// if (jdkVendor != "JetBrains s.r.o.") {
// error(
// "Prebuild AppCDS mode is only supported on JetBrains JDK; " +
// "current vendor is '$jdkVendor'"
// )
// }
}
override val generateJreClassesArchive: Boolean get() = true
override val generateAppClassesArchive: Boolean get() = true
override fun appClassesArchiveCreationJvmArgs() =
listOf(
"-XX:ArchiveClassesAtExit=$ARCHIVE_FILE_ARGUMENT",
"-XX:+NoClasspathInArchive",
"-Dcompose.appcds.create-archive=true",
)
override fun appClassesArchiveFile(packagedAppRootDir: Directory): RegularFile {
val appDir = packagedAppJarFilesDir(packagedAppRootDir)
return appDir.file(ARCHIVE_NAME)
}
override fun runtimeJvmArgs() =
listOf(
"-XX:SharedArchiveFile=$ARCHIVE_FILE_ARGUMENT",
"-XX:+NoClasspathInArchive",
)
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -8,11 +8,12 @@ package org.jetbrains.compose.desktop.application.dsl
import org.gradle.api.Action
import org.gradle.api.model.ObjectFactory
import org.jetbrains.compose.internal.utils.new
import java.io.Serializable
import javax.inject.Inject

abstract class JvmApplicationBuildTypes @Inject constructor(
objects: ObjectFactory
) {
): Serializable {
/**
* The default build type does not have a classifier
* to preserve compatibility with tasks, existing before
Expand All @@ -29,6 +30,8 @@ abstract class JvmApplicationBuildTypes @Inject constructor(
fun release(fn: Action<JvmApplicationBuildType>) {
fn.execute(release)
}

internal val all: List<JvmApplicationBuildType> = listOf(default, release)
}

abstract class JvmApplicationBuildType @Inject constructor(
Expand All @@ -43,4 +46,9 @@ abstract class JvmApplicationBuildType @Inject constructor(
fun proguard(fn: Action<ProguardSettings>) {
fn.execute(proguard)
}

val appCds: AppCdsConfiguration = objects.new()
fun appCds(fn: Action<AppCdsConfiguration>) {
fn.execute(appCds)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ import org.gradle.api.Task
import org.gradle.api.file.Directory
import org.gradle.api.provider.Provider
import org.jetbrains.compose.desktop.application.dsl.JvmApplicationBuildType
import org.jetbrains.compose.desktop.application.dsl.JvmApplicationBuildTypes
import org.jetbrains.compose.internal.KOTLIN_JVM_PLUGIN_ID
import org.jetbrains.compose.internal.KOTLIN_MPP_PLUGIN_ID
import org.jetbrains.compose.internal.javaSourceSets
Expand All @@ -34,6 +35,9 @@ internal data class JvmApplicationContext(
"compose/tmp/$appDirName"
)

val buildTypes: JvmApplicationBuildTypes
get() = appInternal.buildTypes

fun <T : Task> T.useAppRuntimeFiles(fn: T.(JvmApplicationRuntimeFiles) -> Unit) {
val runtimeFiles = app.jvmApplicationRuntimeFilesProvider?.jvmApplicationRuntimeFiles(project)
?: JvmApplicationRuntimeFiles(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,23 +29,31 @@ internal class JvmTasks(
taskNameAction: String,
taskNameObject: String = "",
args: List<Any> = emptyList(),
isHidden: Boolean = false,
noinline configureFn: T.() -> Unit = {}
): TaskProvider<T> {
val buildTypeClassifier = buildType.classifier.uppercaseFirstChar()
val objectClassifier = taskNameObject.uppercaseFirstChar()
val taskName = "$taskNameAction$buildTypeClassifier$objectClassifier"
return register(taskName, klass = T::class.java, args = args, configureFn = configureFn)
return register(
name = taskName,
klass = T::class.java,
args = args,
isHidden = isHidden,
configureFn = configureFn
)
}

fun <T : Task> register(
name: String,
klass: Class<T>,
args: List<Any>,
isHidden: Boolean = false,
configureFn: T.() -> Unit
): TaskProvider<T> =
project.tasks.register(name, klass, *args.toTypedArray()).apply {
configure { task ->
task.group = taskGroup
task.group = if (isHidden) null else taskGroup
task.configureFn()
}
}
Expand Down
Loading
Loading