import org.jetbrains.kotlin.gradle.ExperimentalKotlinGradlePluginApi import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar plugins { alias(libs.plugins.kotlin.multiplatform) alias(libs.plugins.kotlin.serialization) alias(libs.plugins.shadow) } kotlin { jvmToolchain(21) // Native-таргеты, которые покрывает kotlinx.cli 0.3.6 (см. его .module // в Maven Central): linux_x64, macos_x64, macos_arm64, mingw_x64. // linuxArm64 не входит — kotlinx.cli 0.3.6 для него не публикуется // (последний релиз 2023-09, KMP-targets зафиксированы). clikt-multiplatform // 5.x имеет linuxArm64, но ломается на duplicate symbol `selfAndAncestors` // между clikt и clikt-mordant при линковке native (issue ajalt/clikt#598), // поэтому clikt отвергнут. // // iOS не входит: :agentik-cli бессмыслен на iOS, а :client (единственный // его потребитель) тоже без iOS. jvm() listOf( linuxX64(), macosX64(), macosArm64(), mingwX64(), ) sourceSets { commonMain.dependencies { implementation(project(":proto")) implementation(project(":client")) // kotlinx.cli 0.3.6 — KMP subcommand-парсер от JetBrains. // clikt 5.x имеет upstream-баг: `duplicate symbol selfAndAncestors` // между `clikt` и `clikt-mordant` при линковке native. kotlinx.cli // таких проблем нет. implementation(libs.kotlinx.cli) implementation(libs.kotlinx.coroutines.core) } // :agentik-cli — commonMain-only (нет jvmMain/nativeMain разделения): // весь код, включая platformEnv, лежит в commonMain. } @OptIn(ExperimentalKotlinGradlePluginApi::class) jvm { binaries { executable { mainClass.set("pw.binom.agentik.cli.AgentikCliKt") } } } // entryPoint на K/N — это FQN функции БЕЗ суффикса `Kt` // (Java/Kotlin convention `MainKt.main` тут не работает, линкер K/N ищет // функцию как `package.main`). На JVM суффикс `Kt` сохраняется через // mainClass.set(...) выше. listOf( linuxX64(), macosX64(), macosArm64(), mingwX64(), ).forEach { it.binaries.executable { entryPoint = "pw.binom.agentik.cli.main" } } } // Fatjar — аналог :standalone. val shadowJarTask = tasks.register("shadowJar") { archiveBaseName.set("agentik-cli") archiveClassifier.set("all") description = "Self-contained fatjar with all runtime dependencies bundled." group = "build" from(tasks.named("jvmJar")) from(project.configurations.getByName("jvmRuntimeClasspath")) mergeServiceFiles() duplicatesStrategy = DuplicatesStrategy.EXCLUDE manifest { attributes["Main-Class"] = "pw.binom.agentik.cli.AgentikCliKt" attributes["Implementation-Title"] = "agentik-cli" attributes["Implementation-Version"] = project.version.toString() } includeEmptyDirs = false }