22import org.gradle.api.tasks.testing.logging.TestLogEvent
33import org.gradle.nativeplatform.platform.internal.DefaultNativePlatform
44import org.jetbrains.compose.desktop.application.dsl.TargetFormat
5+ import org.jetbrains.compose.reload.gradle.ComposeHotRun
56import org.jetbrains.kotlin.gradle.ExperimentalKotlinGradlePluginApi
67import org.yaml.snakeyaml.LoaderOptions
78import org.yaml.snakeyaml.Yaml
@@ -23,6 +24,7 @@ version = versionProperties.getProperty("version")
2324
2425plugins {
2526 alias(libs.plugins.compose.compiler)
27+ alias(libs.plugins.compose.hot.reload)
2628 alias(libs.plugins.conveyor)
2729 alias(libs.plugins.download)
2830 alias(libs.plugins.jetbrainsCompose)
@@ -197,6 +199,52 @@ tasks.named("desktopProcessResources") {
197199 dependsOn(" copyDevProperties" )
198200}
199201
202+ private fun initJvmArgs (
203+ jvmArgs : (Array <String >) -> Unit ,
204+ buildFullPlatform : Boolean = false,
205+ ) {
206+ // Add system properties that need to be set for all platforms
207+ val loggerLevel = project.findProperty(" loggerLevel" )?.toString() ? : " info"
208+ val appEnv = project.findProperty(" appEnv" )?.toString() ? : " DEVELOPMENT"
209+ val globalListener = project.findProperty(" globalListener" )?.toString() ? : " true"
210+ jvmArgs(
211+ arrayOf(
212+ " -DloggerLevel=$loggerLevel " ,
213+ " -DappEnv=$appEnv " ,
214+ " -Djava.net.preferIPv4Stack=true" ,
215+ " -Djava.net.preferIPv6Addresses=false" ,
216+ " -DglobalListener=$globalListener " ,
217+ " -Dio.netty.maxDirectMemory=268435456" ,
218+ " -DloggerDebugPackages=com.crosspaste.routing,com.crosspaste.net.clientapi,com.crosspaste.net.plugin" ,
219+ ),
220+ )
221+
222+ // Open modules required for all platforms
223+ jvmArgs(arrayOf(" --add-opens" , " java.desktop/sun.awt=ALL-UNNAMED" ))
224+ jvmArgs(arrayOf(" --add-opens" , " java.desktop/java.awt.peer=ALL-UNNAMED" ))
225+
226+ val os: OperatingSystem = DefaultNativePlatform .getCurrentOperatingSystem()
227+
228+ if (os.isMacOsX || buildFullPlatform) {
229+ jvmArgs(arrayOf(" --add-opens" , " java.desktop/sun.lwawt=ALL-UNNAMED" ))
230+ jvmArgs(arrayOf(" --add-opens" , " java.desktop/sun.lwawt.macosx=ALL-UNNAMED" ))
231+ jvmArgs(
232+ arrayOf(
233+ " -Dapple.awt.enableTemplateImages=true" ,
234+ " -Dmac.bundleID=com.crosspaste.mac" ,
235+ ),
236+ )
237+ }
238+
239+ if (os.isLinux || buildFullPlatform) {
240+ jvmArgs(arrayOf(" -Dlinux.force.trayType=AppIndicator" ))
241+ }
242+ }
243+
244+ tasks.withType<ComposeHotRun >().configureEach {
245+ initJvmArgs(this ::jvmArgs)
246+ }
247+
200248compose.desktop {
201249
202250 val buildFullPlatform: Boolean = System .getenv(" BUILD_FULL_PLATFORM" )?.lowercase() == " true"
@@ -293,24 +341,15 @@ compose.desktop {
293341 // includeAllModules = true
294342 modules(" jdk.charsets" , " java.net.http" )
295343
296- // Open modules required for all platforms
297- jvmArgs(" --add-opens" , " java.desktop/sun.awt=ALL-UNNAMED" )
298- jvmArgs(" --add-opens" , " java.desktop/java.awt.peer=ALL-UNNAMED" )
299-
300- // Add system properties that need to be set for all platforms
301- val loggerLevel = project.findProperty(" loggerLevel" )?.toString() ? : " info"
302344 val appEnv = project.findProperty(" appEnv" )?.toString() ? : " DEVELOPMENT"
303- val globalListener = project.findProperty(" globalListener" )?.toString() ? : " true"
304-
305- jvmArgs(" -DloggerLevel=$loggerLevel " )
306- jvmArgs(" -DappEnv=$appEnv " )
307- jvmArgs(" -Djava.net.preferIPv4Stack=true" )
308- jvmArgs(" -Djava.net.preferIPv6Addresses=false" )
309- jvmArgs(" -DglobalListener=$globalListener " )
310- jvmArgs(" -Dio.netty.maxDirectMemory=268435456" )
311- jvmArgs(
312- " -DloggerDebugPackages=com.crosspaste.routing,com.crosspaste.net.clientapi,com.crosspaste.net.plugin" ,
313- )
345+
346+ val jvmArgsLambda: (Array <String >) -> Unit = { args ->
347+ args.forEach {
348+ jvmArgs(it)
349+ }
350+ }
351+
352+ initJvmArgs(jvmArgsLambda, buildFullPlatform)
314353
315354 if (appEnv != " DEVELOPMENT" ) {
316355 tasks.withType<Jar > {
@@ -348,11 +387,6 @@ compose.desktop {
348387 """
349388 }
350389
351- jvmArgs(" --add-opens" , " java.desktop/sun.lwawt=ALL-UNNAMED" )
352- jvmArgs(" --add-opens" , " java.desktop/sun.lwawt.macosx=ALL-UNNAMED" )
353- jvmArgs(" -Dapple.awt.enableTemplateImages=true" )
354- jvmArgs(" -Dmac.bundleID=$bundleID " )
355-
356390 val process = Runtime .getRuntime().exec(arrayOf(" uname" , " -m" ))
357391 val result =
358392 process.inputStream
@@ -397,7 +431,6 @@ compose.desktop {
397431 }
398432
399433 if (os.isLinux || buildFullPlatform) {
400- jvmArgs(" -Dlinux.force.trayType=AppIndicator" )
401434 linux {
402435 targetFormats(TargetFormat .Deb )
403436
0 commit comments