Skip to content
Open
3 changes: 0 additions & 3 deletions buildSrc/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -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")
}
42 changes: 39 additions & 3 deletions buildSrc/src/main/kotlin/ai.smoke-test-jar.gradle.kts
Original file line number Diff line number Diff line change
@@ -1,11 +1,47 @@
import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar
import com.github.jengelman.gradle.plugins.shadow.transformers.PropertiesFileTransformer
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>("shadowJar") {
archiveClassifier.set("")
mergeServiceFiles()

// Properly merge spring.factories files from all dependencies
// This is required for Spring Boot auto-configuration to work
// Use PropertiesFileTransformer to merge duplicate keys instead of simple append
transform(PropertiesFileTransformer::class.java) {
paths = listOf("META-INF/spring.factories")
mergeStrategy = "append"
}

// 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>("jar") {
dependsOn(tasks.shadowJar)
enabled = false
}

aiSmokeTest.testAppArtifactDir.set(tasks.shadowJar.flatMap { it.destinationDirectory })
aiSmokeTest.testAppArtifactFilename.set(tasks.shadowJar.flatMap { it.archiveFileName })
2 changes: 1 addition & 1 deletion gradle/wrapper/gradle-wrapper.properties
Original file line number Diff line number Diff line change
@@ -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
Expand Down
3 changes: 2 additions & 1 deletion smoke-tests/apps/DiagnosticExtension/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,8 @@ plugins {
dependencies {
implementation(project(":agent:agent-profiler:agent-diagnostics-api"))
implementation(project(":agent:agent-profiler:agent-alerting-api"))
implementation(project(":smoke-tests:apps:DiagnosticExtension:MockExtension"))
// MockExtension is loaded as a separate agent extension, not bundled in the app
compileOnly(project(":smoke-tests:apps:DiagnosticExtension:MockExtension"))
testImplementation(project(":smoke-tests:framework"))
implementation("org.springframework.boot:spring-boot-starter-web:2.5.12")
}
3 changes: 3 additions & 0 deletions smoke-tests/apps/JettyNativeHandler/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -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")

Expand Down
2 changes: 2 additions & 0 deletions smoke-tests/apps/NonDaemonThreads/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -5,4 +5,6 @@ plugins {
dependencies {
implementation("org.springframework.boot:spring-boot-starter-web:2.5.12")
implementation("com.squareup.okhttp3:okhttp:3.12.1")
// Include Spring Boot loader classes for TestController to locate the JAR
implementation("org.springframework.boot:spring-boot-loader:2.5.12")
}
3 changes: 3 additions & 0 deletions smoke-tests/apps/ReadOnly/build.gradle.kts
Original file line number Diff line number Diff line change
@@ -1,3 +1,6 @@
plugins {
id("ai.smoke-test-jar")
}

// Override default main class
ext.set("mainClassName", "com.microsoft.applicationinsights.smoketestapp.App")
2 changes: 1 addition & 1 deletion smoke-tests/apps/gRPC/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down