in gradle-plugins/compose/src/main/kotlin/org/jetbrains/compose/desktop/application/tasks/AbstractCheckNativeDistributionRuntime.kt [72:129]
fun run() {
taskDir.ioFile.mkdirs()
val jdkHome = jdkHomeFile
val javaExecutable = jdkHome.getJdkTool("java")
val jlinkExecutable = jdkHome.getJdkTool("jlink")
val jpackageExecutabke = jdkHome.getJdkTool("jpackage")
ensureToolsExist(javaExecutable, jlinkExecutable, jpackageExecutabke)
val jdkRuntimeProperties = getJDKRuntimeProperties(javaExecutable)
val jdkMajorVersionString = jdkRuntimeProperties.getProperty(JdkVersionProbe.JDK_MAJOR_VERSION_KEY)
val jdkMajorVersion = jdkMajorVersionString?.toIntOrNull()
?: jdkDistributionProbingError("JDK version '$jdkMajorVersionString' has unexpected format")
check(jdkMajorVersion >= MIN_JAVA_RUNTIME_VERSION) {
jdkDistributionProbingError(
"minimum required JDK version is '$MIN_JAVA_RUNTIME_VERSION', " +
"but actual version is '$jdkMajorVersion'"
)
}
if (checkJdkVendor.get()) {
val vendor = jdkRuntimeProperties.getProperty(JdkVersionProbe.JDK_VENDOR_KEY)
if (vendor == null) {
logger.warn("JDK vendor probe failed: $jdkHome")
} else {
if (currentOS == OS.MacOS && vendor.equals("homebrew", ignoreCase = true)) {
error(
"""
|Homebrew's JDK distribution may cause issues with packaging.
|See: https://github.com/JetBrains/compose-multiplatform/issues/3107
|Possible solutions:
|* Use other vendor's JDK distribution, such as Amazon Corretto;
|* To continue using Homebrew distribution for packaging on your own risk, add "${ComposeProperties.CHECK_JDK_VENDOR}=false" to your gradle.properties
""".trimMargin())
}
}
}
val modules = arrayListOf<String>()
runExternalTool(
tool = javaExecutable,
args = listOf("--list-modules"),
logToConsole = ExternalToolRunner.LogToConsole.Never,
processStdout = { stdout ->
stdout.lineSequence().forEach { line ->
val moduleName = line.trim().substringBefore("@")
if (moduleName.isNotBlank()) {
modules.add(moduleName)
}
}
}
)
val properties = JvmRuntimeProperties(jdkMajorVersion, modules)
JvmRuntimeProperties.writeToFile(properties, javaRuntimePropertiesFile.ioFile)
}