Skip to content

Commit

Permalink
Add skiko-runtime-jvm jar to preview classpath if necessary (#987)
Browse files Browse the repository at this point in the history
  • Loading branch information
AlexeyTsvetkov authored Aug 3, 2021
1 parent d8ada29 commit 4697b0f
Showing 1 changed file with 38 additions and 2 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import org.gradle.api.provider.Property
import org.gradle.api.provider.Provider
import org.gradle.api.tasks.*
import org.jetbrains.compose.ComposeBuildConfig
import org.jetbrains.compose.desktop.application.internal.currentTarget
import org.jetbrains.compose.desktop.application.internal.javaExecutable
import org.jetbrains.compose.desktop.application.internal.notNullProperty
import org.jetbrains.compose.desktop.tasks.AbstractComposeDesktopTask
Expand Down Expand Up @@ -52,8 +53,10 @@ abstract class AbstractConfigureDesktopPreviewTask : AbstractComposeDesktopTask(
hostClasspath = hostClasspath.files.asSequence().pathString()
)
val previewClasspathString =
(previewClasspath.files.asSequence() + uiTooling.files.asSequence())
.pathString()
(previewClasspath.files.asSequence() +
uiTooling.files.asSequence() +
tryGetSkikoRuntimeFilesIfNeeded().asSequence()
).pathString()

val gradleLogger = logger
val previewLogger = GradlePreviewLoggerAdapter(gradleLogger)
Expand All @@ -72,6 +75,39 @@ abstract class AbstractConfigureDesktopPreviewTask : AbstractComposeDesktopTask(
}
}

private fun tryGetSkikoRuntimeFilesIfNeeded(): Collection<File> {
try {
var hasSkikoJvm = false
var hasSkikoJvmRuntime = false
var skikoVersion: String? = null
for (file in previewClasspath.files) {
if (file.name.endsWith(".jar")) {
if (file.name.startsWith("skiko-jvm-runtime-")) {
hasSkikoJvmRuntime = true
continue
} else if (file.name.startsWith("skiko-jvm-")) {
hasSkikoJvm = true
skikoVersion = file.name
.removePrefix("skiko-jvm-")
.removeSuffix(".jar")
}
}
}
if (hasSkikoJvmRuntime) return emptyList()

if (hasSkikoJvm && skikoVersion != null && skikoVersion.isNotBlank()) {
val skikoRuntimeConfig = project.configurations.detachedConfiguration(
project.dependencies.create("org.jetbrains.skiko:skiko-jvm-runtime-${currentTarget.id}:$skikoVersion")
).apply { isTransitive = false }
return skikoRuntimeConfig.files
}
} catch (e: Exception) {
// OK
}

return emptyList()
}

private fun Sequence<File>.pathString(): String =
joinToString(File.pathSeparator) { it.absolutePath }

Expand Down

0 comments on commit 4697b0f

Please sign in to comment.