import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar import java.io.BufferedReader plugins { // id("org.jetbrains.kotlin.jvm") version "1.4.21" 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.2.1" repositories { mavenCentral() jcenter() maven { url = uri("https://jitpack.io") } } dependencies { // implementation(platform("org.jetbrains.kotlin:kotlin-bom")) implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk8") // Source models and interfaces from Tachiyomi 1.x // using source class from tachiyomi commit 9493577de27c40ce8b2b6122cc447d025e34c477 to not depend on tachiyomi.sourceapi // implementation("tachiyomi.sourceapi:source-api:1.1") implementation("com.github.inorichi.injekt:injekt-core:65b0440") val okhttp_version = "4.10.0-RC1" implementation("com.squareup.okhttp3:okhttp:$okhttp_version") implementation("com.squareup.okhttp3:logging-interceptor:$okhttp_version") implementation("com.squareup.okhttp3:okhttp-dnsoverhttps:$okhttp_version") implementation("com.squareup.okio:okio:2.9.0") // retrofit val retrofit_version = "2.9.0" implementation("com.squareup.retrofit2:retrofit:$retrofit_version") implementation("com.jakewharton.retrofit:retrofit2-kotlinx-serialization-converter:0.8.0") implementation("com.squareup.retrofit2:converter-gson:$retrofit_version") implementation("com.squareup.retrofit2:adapter-rxjava:$retrofit_version") // reactivex implementation("io.reactivex:rxjava:1.3.8") // implementation("io.reactivex:rxandroid:1.2.1") // implementation("com.jakewharton.rxrelay:rxrelay:1.2.0") // implementation("com.github.pwittchen:reactivenetwork:0.13.0") implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.0.0") implementation("com.google.code.gson:gson:2.8.6") implementation("com.github.salomonbrys.kotson:kotson:2.5.0") implementation("org.jsoup:jsoup:1.13.1") implementation("com.github.salomonbrys.kotson:kotson:2.5.0") implementation("com.squareup.duktape:duktape-android:1.3.0") val coroutinesVersion = "1.3.9" implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:$coroutinesVersion") // dex2jar implementation(fileTree("lib/dex2jar/")) // api implementation("io.javalin:javalin:3.12.0") implementation("org.slf4j:slf4j-simple:1.8.0-beta4") implementation("org.slf4j:slf4j-api:1.8.0-beta4") implementation("com.fasterxml.jackson.core:jackson-databind:2.10.3") // to get application content root implementation("net.harawata:appdirs:1.2.0") // 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") // tray icon implementation("com.dorkbox:SystemTray:3.17") // AndroidCompat implementation(project(":AndroidCompat")) implementation(project(":AndroidCompat:Config")) testImplementation("org.jetbrains.kotlin:kotlin-test") testImplementation("org.jetbrains.kotlin:kotlin-test-junit") } val name = "ir.armor.tachidesk.Main" application { mainClass.set(name) // Required by ShadowJar. mainClassName = name } sourceSets { main { resources { srcDir("src/main/resources") } } } val TachideskRevision = Runtime .getRuntime() .exec("git rev-list master --count") .let { process -> process.waitFor() val output = process.inputStream.use { it.bufferedReader().use(BufferedReader::readText) } process.destroy() "r" + output.trim() } tasks { jar { manifest { attributes( mapOf( "Main-Class" to "com.example.MainKt", //will make your jar (produced by jar task) runnable "ImplementationTitle" to project.name, "Implementation-Version" to project.version) ) } } shadowJar { manifest.inheritFrom(jar.get().manifest) //will make your shadowJar (produced by jar task) runnable archiveBaseName.set("Tachidesk") archiveVersion.set(TachideskVersion) archiveClassifier.set(TachideskRevision) } } 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") } tasks.named("processResources") { dependsOn(":webUI:copyBuild") } tasks.named("run") { dependsOn("formatKotlin", "lintKotlin") }