Improve the format of openjfx-dependencies.json

This commit is contained in:
Glavo
2022-01-18 12:21:28 +08:00
committed by Yuhui Huang
parent e0f7d9cd32
commit 05fdea3267
2 changed files with 69 additions and 104 deletions

View File

@@ -104,24 +104,37 @@ tasks.create("checkTranslations") {
defaultTasks("clean", "build")
data class Platform(
val name: String,
val classifier: String,
val groupId: String = "org.openjfx",
val unsupportedModules: List<String> = listOf()
) {
val modules: List<String> = jfxModules.filter { it !in unsupportedModules }
fun fileUrl(
module: String, classifier: String, ext: String,
repo: String = "https://repo1.maven.org/maven2"
): java.net.URL =
java.net.URL(
"$repo/${groupId.replace('.', '/')}/javafx-$module/$jfxVersion/javafx-$module-$jfxVersion-$classifier.$ext"
)
}
val jfxModules = listOf("base", "graphics", "controls", "fxml", "media", "web")
val jfxClassifier = listOf(
"linux", "linux-arm32-monocle", "linux-aarch64",
"mac", "mac-aarch64",
"win", "win-x86"
)
val jfxVersion = "17"
val jfxMirrorRepos = listOf("https://maven.aliyun.com/repository/central")
val jfxDependenciesFile = project("HMCL").buildDir.resolve("openjfx-dependencies.json")
val jfxUnsupported = mapOf(
"linux-arm32-monocle" to listOf("media", "web")
val jfxPlatforms = listOf(
Platform("windows-x86", "win-x86"),
Platform("windows-x86_64", "win"),
Platform("osx-x86_64", "mac"),
Platform("osx-arm64", "mac-aarch64"),
Platform("linux-x86_64", "linux"),
Platform("linux-arm32", "linux-arm32-monocle", unsupportedModules = listOf("media", "web")),
Platform("linux-arm64", "linux-aarch64"),
)
fun isSupported(module: String, classifier: String) = when (classifier) {
"linux-arm32-monocle" -> module != "media" && module != "web"
else -> true
}
val jfxInClasspath =
try {
Class.forName("javafx.application.Application", false, this.javaClass.classLoader)
@@ -134,23 +147,28 @@ if (!jfxInClasspath && JavaVersion.current() >= JavaVersion.VERSION_11) {
val os = System.getProperty("os.name").toLowerCase().let { osName ->
when {
osName.contains("win") -> "win"
osName.contains("mac") -> "mac"
osName.contains("mac") -> "osx"
osName.contains("linux") || osName.contains("unix") -> "linux"
else -> null
}
}
val classifier = if (os == null) null else when (System.getProperty("os.arch").toLowerCase()) {
"x86_64", "x86-64", "amd64", "ia32e", "em64t", "x64" -> os
"x86", "x86_32", "x86-32", "i386", "i486", "i586", "i686", "i86pc", "ia32", "x32" -> "$os-x86"
"arm64", "aarch64", "armv8", "armv9" -> "$os-aarch64"
val arch = when (System.getProperty("os.arch").toLowerCase()) {
"x86_64", "x86-64", "amd64", "ia32e", "em64t", "x64" -> "x86_64"
"x86", "x86_32", "x86-32", "i386", "i486", "i586", "i686", "i86pc", "ia32", "x32" -> "x86"
"arm64", "aarch64", "armv8", "armv9" -> "arm64"
else -> null
}
if (classifier != null && classifier in jfxClassifier) {
rootProject.subprojects {
for (module in jfxModules) {
dependencies.add("compileOnly", "org.openjfx:javafx-$module:$jfxVersion:$classifier")
if (os != null && arch != null) {
val platform = jfxPlatforms.find { it.name == "$os-arch" }
if (platform != null) {
val groupId = platform.groupId
val classifier = platform.classifier
rootProject.subprojects {
for (module in jfxModules) {
dependencies.add("compileOnly", "$groupId:javafx-$module:$jfxVersion:$classifier")
}
}
}
}
@@ -160,18 +178,17 @@ rootProject.tasks.create("generateOpenJFXDependencies") {
outputs.file(jfxDependenciesFile)
doLast {
val jfxDependencies = jfxModules.map { module ->
linkedMapOf(
"module" to "javafx.$module",
"groupId" to "org.openjfx",
"artifactId" to "javafx-$module",
"version" to jfxVersion,
"sha1" to jfxClassifier.filter { classifier -> isSupported(module, classifier) }
.associateWith { classifier ->
java.net.URL("https://repo1.maven.org/maven2/org/openjfx/javafx-$module/$jfxVersion/javafx-$module-$jfxVersion-$classifier.jar.sha1")
.readText()
}
)
val jfxDependencies = jfxPlatforms.associate { platform ->
platform.name to platform.modules.map { module ->
mapOf(
"module" to "javafx.$module",
"groupId" to platform.groupId,
"artifactId" to "javafx-$module",
"version" to jfxVersion,
"classifier" to platform.classifier,
"sha1" to platform.fileUrl(module, platform.classifier, "jar.sha1").readText()
)
}
}
jfxDependenciesFile.parentFile.mkdirs()
@@ -185,16 +202,13 @@ rootProject.tasks.create("generateOpenJFXDependencies") {
rootProject.tasks.create("preTouchOpenJFXDependencies") {
doLast {
for (repo in jfxMirrorRepos) {
for (module in jfxModules) {
for (classifier in jfxClassifier) {
if (isSupported(module, classifier)) {
val jarUrl =
java.net.URL("$repo/org/openjfx/javafx-$module/$jfxVersion/javafx-$module-$jfxVersion-$classifier.jar")
try {
jarUrl.readBytes()
} catch (e: Throwable) {
logger.warn("An exception occurred while pre touching $jarUrl", e)
}
for (platform in jfxPlatforms) {
for (module in platform.modules) {
val url = platform.fileUrl(module, platform.classifier, "jar")
try {
url.readBytes()
} catch (e: Throwable) {
logger.warn("An exception occurred while pre touching $url", e)
}
}
}