From 251d3e229549a00ca42428237370df1a7d8ab92c Mon Sep 17 00:00:00 2001 From: Robert Stupp Date: Thu, 16 Jan 2025 10:23:59 +0100 Subject: [PATCH] Optionally build Polaris Server Quarkus uber-jar We currently build Polaris Quarkus as a `fast-jar`. In order to eventually publish the Polaris Quarkus server in a binary release to Maven Central, it is beneficial to use an uber-jar. This change allows to do that if the project property `uber-jar` is present, for example `./gradlew publishToMavenLocal -Puber-jar` Note that the Quarkus uber-jars are placed directly in the Gradle project's `build/` directory, not in `build/libs/` --- quarkus/server/build.gradle.kts | 49 +++++++++++++++++++++++++++++++-- 1 file changed, 47 insertions(+), 2 deletions(-) diff --git a/quarkus/server/build.gradle.kts b/quarkus/server/build.gradle.kts index c6aa5344ca..1e49db319e 100644 --- a/quarkus/server/build.gradle.kts +++ b/quarkus/server/build.gradle.kts @@ -17,6 +17,8 @@ * under the License. */ +import io.quarkus.gradle.tasks.QuarkusBuild + plugins { alias(libs.plugins.quarkus) alias(libs.plugins.jandex) @@ -26,6 +28,11 @@ plugins { id("distribution") } +val quarkusRunner by + configurations.creating { + description = "Used to reference the generated runner-jar (either fast-jar or uber-jar)" + } + dependencies { implementation(project(":polaris-core")) implementation(project(":polaris-api-management-service")) @@ -41,8 +48,10 @@ dependencies { implementation(platform(libs.dnsjava)) } +val quarkusFatJar = project.hasProperty("uber-jar") || project.hasProperty("release") + quarkus { - quarkusBuildProperties.put("quarkus.package.type", "fast-jar") + quarkusBuildProperties.put("quarkus.package.type", if (quarkusFatJar) "uber-jar" else "fast-jar") // Pull manifest attributes from the "main" `jar` task to get the // release-information into the jars generated by Quarkus. quarkusBuildProperties.putAll( @@ -69,10 +78,46 @@ tasks.register("polarisServerRun") { dependsOn("quarkusRun") } distributions { main { contents { - from(project.layout.buildDirectory.dir("quarkus-app")) + if (quarkusFatJar) { + from(project.layout.buildDirectory) { include("polaris-quarkus-admin-*-runner.jar") } + } else { + from(project.layout.buildDirectory.dir("quarkus-app")) + } from("../../NOTICE") from("../../LICENSE-BINARY-DIST").rename("LICENSE-BINARY-DIST", "LICENSE") exclude("lib/main/io.quarkus.quarkus-container-image*") } } } + +val quarkusBuild = tasks.named("quarkusBuild") + +// Expose runnable jar via quarkusRunner configuration for integration-tests that require the +// server. +artifacts { + add( + quarkusRunner.name, + provider { + if (quarkusFatJar) quarkusBuild.get().runnerJar + else quarkusBuild.get().fastJar.resolve("quarkus-run.jar") + }, + ) { + builtBy(quarkusBuild) + } +} + +// Add the uber-jar, if built, to the Maven publication +if (quarkusFatJar) { + afterEvaluate { + publishing { + publications { + named("maven") { + artifact(quarkusBuild.get().runnerJar) { + classifier = "runner" + builtBy(quarkusBuild) + } + } + } + } + } +}