diff --git a/build.gradle.kts b/build.gradle.kts index b3f355f4455ab33abf357a4e669de6d98c03d3c9..e508afb51accfe41712f944cf0451627d86bab51 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -1,4 +1,11 @@ -import org.gradle.internal.os.OperatingSystem +import com.google.protobuf.gradle.id + +plugins { + kotlin("jvm") version "1.8.0" + application + id("com.google.protobuf") version "0.9.2" +} + val lwjglVersion = "3.3.1" @@ -15,14 +22,45 @@ val lwjglNatives = Pair( } } -plugins { - kotlin("jvm") version "1.8.0" - application -} - group = "com.radarsystem.viewer" version = "1.0.0" + +sourceSets { + main { + proto { + srcDir("src/main/resources/protos") + } + } +} + + +protobuf { + protoc { + artifact = "com.google.protobuf:protoc:3.22.0" + } + plugins { + id("grpc") { + artifact = "io.grpc:protoc-gen-grpc-java:1.53.0" + } + id("grpckt") { + artifact = "io.grpc:protoc-gen-grpc-kotlin:1.3.0:jdk8@jar" + } + } + generateProtoTasks { + all().forEach { + it.plugins { + id("grpc") + id("grpckt") + } + it.builtins { + id("kotlin") + } + } + } +} + + repositories { mavenCentral() } @@ -44,6 +82,12 @@ dependencies { runtimeOnly("org.lwjgl", "lwjgl-openal", classifier = lwjglNatives) runtimeOnly("org.lwjgl", "lwjgl-opengl", classifier = lwjglNatives) runtimeOnly("org.lwjgl", "lwjgl-stb", classifier = lwjglNatives) + + implementation("io.grpc:grpc-kotlin-stub:1.3.0") + implementation("io.grpc:grpc-protobuf:1.53.0") + implementation("com.google.protobuf:protobuf-kotlin:3.22.0") + + runtimeOnly("io.grpc:grpc-netty-shaded:1.53.0") } tasks.test { @@ -56,4 +100,25 @@ kotlin { application { mainClass.set("MainKt") -} \ No newline at end of file +} + + +tasks { + val buildJar = register<Jar>("build-jar") { + dependsOn.addAll(listOf("compileJava", "compileKotlin", "processResources")) + archiveClassifier.set("radar-server") + duplicatesStrategy = DuplicatesStrategy.EXCLUDE + manifest { + attributes(mapOf("Main-Class" to application.mainClass)) + } + val sourcesMain = sourceSets.main.get() + val contents = configurations.runtimeClasspath.get() + .map { if (it.isDirectory) it else zipTree(it) } + + sourcesMain.output + from(contents) + } + + build { + dependsOn(buildJar) + } +}