plugins { alias(libs.plugins.kotlin.jvm) alias(ktorLibs.plugins.ktor) alias(libs.plugins.kotlin.serialization) // alias(libs.plugins.ksp) alias(masterLibs.plugins.versionPlugin) } group = "net.keinekekse.app" version = libs.versions.appsrv.get() description = "Ktor Application Server" extra["displayname"] = "Application Server" extra["copyright"] = "Copyright (c) 2026 Hartmut Bauer" versionConfig { versionClassFile.set(layout.projectDirectory.file("src/main/kotlin/Version.kt")) versionPackageName.set("net.keinekekse.app") modules.set( mapOf( "books" to mapOf( "version" to libs.versions.books.get(), "displayName" to "Books-DB", "description" to "Books + Comics Database" ) ) ) } application { mainClass = "io.ktor.server.netty.EngineMain" // java >= 24 // WARNING: A restricted method in java.lang.System has been called // WARNING: java.lang.System::loadLibrary has been called by io.netty.util.internal.NativeLibraryUtil in an unnamed module // (file:/Users/hb/.gradle/caches/modules-2/files-2.1/io.netty/netty-common/4.2.16.Final/c2bc7fa5acfa2afc777e944d84f0aa65559cc81e/netty-common-4.2.16.Final.jar) // WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module // WARNING: Restricted methods will be blocked in a future release unless native access is enabled applicationDefaultJvmArgs = listOf("--enable-native-access=ALL-UNNAMED") } val buildTailwind = tasks.register("buildTailwind", Exec::class) { description = "build tailwind css file" workingDir = rootProject.layout.projectDirectory.dir("tailwind").asFile // direkt ins buildDir schreiben, weil Task processResources hier zu spät kommt commandLine( "/Users/hb/.npm-packages/bin/npx", "@tailwindcss/cli", "-i", "./input.css", "-o", layout.buildDirectory.dir("resources/main/static").get() .toString() + "/styles/tailwind.css", "--minify" ) } val copyWebDistToServerResources = tasks.register("copyWebDistToServerResources", Copy::class) { description = "copy web dist to server resources" dependsOn(project(":web").tasks.named("jsBrowserDistribution")) from(project(":web").layout.buildDirectory.dir("dist/js/productionExecutable")) into(layout.buildDirectory.dir("resources/main/web")) // from(rootProject.layout.projectDirectory.file("build/js/node_modules/bootstrap/dist/css/bootstrap.min.css")) // into(layout.buildDirectory.dir("resources/main/web")) } tasks.named("processResources") { dependsOn(buildTailwind) dependsOn(copyWebDistToServerResources) } kotlin { jvmToolchain(libs.versions.jvm.get().toInt()) } java { toolchain { languageVersion.set(JavaLanguageVersion.of(libs.versions.jvm.get())) } } dependencies { implementation(project(":shared")) implementation(masterLibs.utilLibrary) implementation(ktorLibs.client.apache5) implementation(ktorLibs.client.cio) implementation(ktorLibs.client.core) implementation(ktorLibs.htmx.html) implementation(ktorLibs.serialization.kotlinx.json) implementation(ktorLibs.server.auth) implementation(ktorLibs.server.auth.oidc) implementation(ktorLibs.server.auth.jwt) implementation(ktorLibs.server.cachingHeaders) implementation(ktorLibs.server.compression) implementation(ktorLibs.server.config.yaml) implementation(ktorLibs.server.contentNegotiation) implementation(ktorLibs.server.core) implementation(ktorLibs.server.cors) implementation(ktorLibs.server.csrf) implementation(ktorLibs.server.defaultHeaders) implementation(ktorLibs.server.di) implementation(ktorLibs.server.forwardedHeader) implementation(ktorLibs.server.htmlBuilder) implementation(ktorLibs.server.htmx) implementation(ktorLibs.server.netty) implementation(ktorLibs.server.statusPages) implementation(ktorLibs.server.sessions) implementation(libs.exposed.core) implementation(libs.exposed.jdbc) implementation(libs.exposed.dao) implementation(libs.exposed.r2dbc) implementation(libs.h2database.h2) implementation(libs.h2database.r2dbc) implementation(libs.kotlinx.kotlinxHtml) implementation(libs.logback.classic) implementation(libs.postgresql) implementation(libs.hikaricp) // implementation(libs.koin.ktor) // implementation(libs.koin.logger) // implementation(libs.koin.annotations) // ksp(libs.koin.ksp) // testImplementation(kotlin("test")) // testImplementation(ktorLibs.server.testHost) }