diff --git a/buildSrc/build.gradle.kts b/buildSrc/build.gradle.kts index 144f9565c73..241cdee77bd 100644 --- a/buildSrc/build.gradle.kts +++ b/buildSrc/build.gradle.kts @@ -43,7 +43,4 @@ dependencies { implementation("gradle.plugin.io.morethan.jmhreport:gradle-jmh-report:0.9.6") implementation("me.champeau.jmh:jmh-gradle-plugin:0.7.3") - - // earlier versions aren't compatible with Gradle 8.1.1 - implementation("org.springframework.boot:spring-boot-gradle-plugin:2.5.12") } diff --git a/buildSrc/src/main/kotlin/ai.smoke-test-jar.gradle.kts b/buildSrc/src/main/kotlin/ai.smoke-test-jar.gradle.kts index bf6a7dcb5ac..62057c978f8 100644 --- a/buildSrc/src/main/kotlin/ai.smoke-test-jar.gradle.kts +++ b/buildSrc/src/main/kotlin/ai.smoke-test-jar.gradle.kts @@ -1,11 +1,43 @@ +import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar +import com.github.jengelman.gradle.plugins.shadow.transformers.AppendingTransformer import com.microsoft.applicationinsights.gradle.AiSmokeTestExtension plugins { id("ai.smoke-test") - id("org.springframework.boot") + id("com.gradleup.shadow") } val aiSmokeTest = extensions.getByType(AiSmokeTestExtension::class) -aiSmokeTest.testAppArtifactDir.set(tasks.bootJar.flatMap { it.destinationDirectory }) -aiSmokeTest.testAppArtifactFilename.set(tasks.bootJar.flatMap { it.archiveFileName }) +// Create a fat JAR using Shadow instead of Spring Boot plugin for Gradle 9 compatibility +// Spring Boot 2.x doesn't support Gradle 9, and Spring Boot 3.x requires Java 17+ +// Shadow creates a simple fat JAR that works with Java 8 +tasks.named("shadowJar") { + archiveClassifier.set("") + mergeServiceFiles() + + // Append spring.factories files from all dependencies + // This is required for Spring Boot auto-configuration to work + append("META-INF/spring.factories") + + // Set main class - can be overridden by individual projects via mainClassName property + manifest { + val mainClass = if (project.hasProperty("mainClassName")) { + project.property("mainClassName") as String + } else { + // Default main class for most smoke test apps + "com.microsoft.applicationinsights.smoketestapp.SpringBootApp" + } + attributes["Main-Class"] = mainClass + } +} + +// Make jar task depend on shadowJar and use the shadow JAR output +// This prevents the regular jar task from overwriting the fat JAR +tasks.named("jar") { + dependsOn(tasks.shadowJar) + enabled = false +} + +aiSmokeTest.testAppArtifactDir.set(tasks.shadowJar.flatMap { it.destinationDirectory }) +aiSmokeTest.testAppArtifactFilename.set(tasks.shadowJar.flatMap { it.archiveFileName }) diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index d4081da476b..19a6bdeb848 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.14.3-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-9.3.0-bin.zip networkTimeout=10000 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME diff --git a/smoke-tests/apps/JettyNativeHandler/build.gradle.kts b/smoke-tests/apps/JettyNativeHandler/build.gradle.kts index 2bb4f96b5b8..7b2c8cb225f 100644 --- a/smoke-tests/apps/JettyNativeHandler/build.gradle.kts +++ b/smoke-tests/apps/JettyNativeHandler/build.gradle.kts @@ -2,6 +2,9 @@ plugins { id("ai.smoke-test-jar") } +// Override default main class +ext.set("mainClassName", "com.microsoft.applicationinsights.smoketestapp.JettyNativeHandlerApp") + dependencies { implementation("org.springframework.boot:spring-boot-starter:2.5.12") diff --git a/smoke-tests/apps/ReadOnly/build.gradle.kts b/smoke-tests/apps/ReadOnly/build.gradle.kts index 29d8040b549..b2b99c406ac 100644 --- a/smoke-tests/apps/ReadOnly/build.gradle.kts +++ b/smoke-tests/apps/ReadOnly/build.gradle.kts @@ -1,3 +1,6 @@ plugins { id("ai.smoke-test-jar") } + +// Override default main class +ext.set("mainClassName", "com.microsoft.applicationinsights.smoketestapp.App") diff --git a/smoke-tests/apps/gRPC/build.gradle.kts b/smoke-tests/apps/gRPC/build.gradle.kts index eae03a2ecef..8281fb5022c 100644 --- a/smoke-tests/apps/gRPC/build.gradle.kts +++ b/smoke-tests/apps/gRPC/build.gradle.kts @@ -2,7 +2,7 @@ import com.google.protobuf.gradle.* plugins { id("ai.smoke-test-jar") - id("com.google.protobuf") version "0.8.19" + id("com.google.protobuf") version "0.9.6" } val grpcVersion = "1.26.0" // first version with support for arm64