From 7870d665c4b62b5bed6d6c6824c64901c1663a68 Mon Sep 17 00:00:00 2001 From: Alexey Tsvetkov <654232+AlexeyTsvetkov@users.noreply.github.com> Date: Thu, 5 Aug 2021 12:12:37 +0300 Subject: [PATCH] Escape resources dir separator on Windows (#1005) Resolves #999 --- .../desktop/application/tasks/AbstractJPackageTask.kt | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/gradle-plugins/compose/src/main/kotlin/org/jetbrains/compose/desktop/application/tasks/AbstractJPackageTask.kt b/gradle-plugins/compose/src/main/kotlin/org/jetbrains/compose/desktop/application/tasks/AbstractJPackageTask.kt index 55c9584ca8..eb80b42a5c 100644 --- a/gradle-plugins/compose/src/main/kotlin/org/jetbrains/compose/desktop/application/tasks/AbstractJPackageTask.kt +++ b/gradle-plugins/compose/src/main/kotlin/org/jetbrains/compose/desktop/application/tasks/AbstractJPackageTask.kt @@ -232,8 +232,14 @@ abstract class AbstractJPackageTask @Inject constructor( private val libsMapping = FilesMapping() override fun makeArgs(tmpDir: File): MutableList = super.makeArgs(tmpDir).apply { - fun appDir(vararg pathParts: String): String = - listOf("${'$'}APPDIR", *pathParts).joinToString(File.separator) { it } + fun appDir(vararg pathParts: String): String { + /** For windows we need to pass '\\' to jpackage file, each '\' need to be escaped. + Otherwise '$APPDIR\resources' is passed to jpackage, + and '\r' is treated as a special character at run time. + */ + val separator = if (currentTarget.os == OS.Windows) "\\\\" else "/" + return listOf("${'$'}APPDIR", *pathParts).joinToString(separator) { it } + } if (targetFormat == TargetFormat.AppImage || appImage.orNull == null) { // Args, that can only be used, when creating an app image or an installer w/o --app-image parameter