From 1ea51bb9df96a291462a123e323154378011c958 Mon Sep 17 00:00:00 2001 From: Aria Moradi Date: Thu, 4 Feb 2021 23:40:40 +0330 Subject: [PATCH] add launch4j --- server/build.gradle.kts | 71 ++++++++++++++++-- server/src/main/resources/icon/icon_round.ico | Bin 0 -> 152126 bytes 2 files changed, 64 insertions(+), 7 deletions(-) create mode 100644 server/src/main/resources/icon/icon_round.ico diff --git a/server/build.gradle.kts b/server/build.gradle.kts index fbb79ecd..766b73a2 100644 --- a/server/build.gradle.kts +++ b/server/build.gradle.kts @@ -6,6 +6,7 @@ plugins { application id("com.github.johnrengelman.shadow") version "6.1.0" id("org.jmailen.kotlinter") version "3.3.0" + id("edu.sc.seis.launch4j") version "2.4.9" } val TachideskVersion = "v0.1.5" @@ -76,16 +77,15 @@ dependencies { // Exposed ORM val exposed_version = "0.28.1" - implementation ("org.jetbrains.exposed:exposed-core:$exposed_version") - implementation ("org.jetbrains.exposed:exposed-dao:$exposed_version") - implementation ("org.jetbrains.exposed:exposed-jdbc:$exposed_version") - implementation ("com.h2database:h2:1.4.199") + implementation("org.jetbrains.exposed:exposed-core:$exposed_version") + implementation("org.jetbrains.exposed:exposed-dao:$exposed_version") + implementation("org.jetbrains.exposed:exposed-jdbc:$exposed_version") + implementation("com.h2database:h2:1.4.199") // tray icon implementation("com.dorkbox:SystemTray:3.17") - // AndroidCompat implementation(project(":AndroidCompat")) implementation(project(":AndroidCompat:Config")) @@ -95,8 +95,8 @@ dependencies { testImplementation("org.jetbrains.kotlin:kotlin-test-junit") } +val name = "ir.armor.tachidesk.Main" application { - val name = "ir.armor.tachidesk.Main" mainClass.set(name) // Required by ShadowJar. @@ -120,7 +120,7 @@ val TachideskRevision = Runtime it.bufferedReader().use(BufferedReader::readText) } process.destroy() - "r"+output.trim() + "r" + output.trim() } @@ -143,6 +143,63 @@ tasks { } } +launch4j { //used for windows + mainClassName = name + bundledJrePath = "jre" + bundledJre64Bit = true + jreMinVersion = "8" + outputDir = "Tachidesk-$TachideskVersion-$TachideskRevision-win32" + icon = "${projectDir}/src/main/resources/icon/icon_round.ico" + jar = "${projectDir}/build/Tachidesk-$TachideskVersion-$TachideskRevision.jar" +} + +tasks.register("windowsPackage") { + from(fileTree("$buildDir/Tachidesk-$TachideskVersion-$TachideskRevision-win32")) + destinationDirectory.set(File("$buildDir")) + archiveFileName.set("Tachidesk-$TachideskVersion-$TachideskRevision-win32.zip") + dependsOn("windowsPackageWorkaround2") +} + +tasks.register("windowsPackageWorkaround2") { + delete( + "$buildDir/Tachidesk-$TachideskVersion-$TachideskRevision-win32/jre", + "$buildDir/Tachidesk-$TachideskVersion-$TachideskRevision-win32/lib", + "$buildDir/Tachidesk-$TachideskVersion-$TachideskRevision-win32/server.exe", + "$buildDir/Tachidesk-$TachideskVersion-$TachideskRevision-win32/Tachidesk-$TachideskVersion-$TachideskRevision-win32/Tachidesk-$TachideskVersion-$TachideskRevision-win32" + ) + dependsOn("windowsPackageWorkaround") +} + +tasks.register("windowsPackageWorkaround") { + from("$buildDir/Tachidesk-$TachideskVersion-$TachideskRevision-win32") + into("$buildDir/Tachidesk-$TachideskVersion-$TachideskRevision-win32/Tachidesk-$TachideskVersion-$TachideskRevision-win32") + dependsOn("deleteUnwantedJreDir") +} + +tasks.register("deleteUnwantedJreDir") { + delete( + "$buildDir/Tachidesk-$TachideskVersion-$TachideskRevision-win32/jdk8u282-b08-jre" + ) + dependsOn("addJreToDistributable") +} + +tasks.register("addJreToDistributable") { + from(zipTree("$buildDir/OpenJDK8U-jre_x86-32_windows_hotspot_8u282b08.zip")) + into("$buildDir/Tachidesk-$TachideskVersion-$TachideskRevision-win32") + eachFile { + path = path.replace(".*-jre".toRegex(),"jre") + } + dependsOn("downloadJre") + dependsOn("createExe") +} + +tasks.register("downloadJre") { + src("https://github.com/AdoptOpenJDK/openjdk8-binaries/releases/download/jdk8u282-b08/OpenJDK8U-jre_x86-32_windows_hotspot_8u282b08.zip") + dest(buildDir) + overwrite(false) + onlyIfModified(true) +} + tasks.withType { destinationDir = File("$rootDir/server/build") dependsOn("lintKotlin") diff --git a/server/src/main/resources/icon/icon_round.ico b/server/src/main/resources/icon/icon_round.ico new file mode 100644 index 0000000000000000000000000000000000000000..1d0fbe9e68810356f216c5448c2f70a5470b0000 GIT binary patch literal 152126 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 literal 0 HcmV?d00001