Compose desktop 自打包

# proguard-rules.pro
-dontcompress

# build.gradle.kts
// ./gradlew release7z -PreleaseVersion="1.4.0"
tasks.register<Task>("release7z") {
    val obfuscate by tasks.getting
    dependsOn(obfuscate)
    val inputFiles = obfuscate.outputs.files
    val libsDir = file("../libs/")
    val releaseDir = file("../release/")
    inputs.files(inputFiles)
    outputs.dir(releaseDir)
    doLast {
        val jarFile = inputFiles.singleFile
        val appName = rootProject.name
        val appVersion = (project.findProperty("releaseVersion") as? String)
            ?.takeIf { it.isNotEmpty() }
            ?: ("-" + formatTimestamp())
        val outDir = File(releaseDir, "$appName$appVersion")
        val out7z = File(releaseDir, "$appName$appVersion.7z")
        val outJarFile = File(outDir, jarFile.name)
        libsDir.copyRecursively(outDir)
        jarFile.copyTo(outJarFile)
        exec {
            commandLine("7z", "a", "-t7z", "-mx9", out7z, "$outDir/*")
        }
        outDir.deleteRecursively()
    }
}

fun formatTimestamp(timestamp: Long = System.currentTimeMillis()): String {
    val formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd_HH-mm-ss")
        .withZone(ZoneId.systemDefault())
    return Instant.ofEpochMilli(timestamp)
        .atZone(formatter.zone)
        .format(formatter)
}