Skip to content

Commit 6347304

Browse files
committed
fix(build): remove Spring Boot 2 Gradle plugin for Gradle 9 compatibility
The Spring Boot 2.7.x Gradle plugin uses removed Gradle APIs (LenientConfiguration.getFiles()) that are incompatible with Gradle 9. Library modules (sentry-spring, sentry-spring-boot, sentry-spring-boot-starter): - Replace SpringBootPlugin.BOM_COORDINATES with direct BOM reference via version catalog (libs.springboot2.bom) - Remove the 'apply false' plugin declaration entirely Sample apps (spring-boot, webflux, otel, netflix-dgs): - Replace Spring Boot plugin with Shadow plugin for fat JAR creation - Add application plugin for main class configuration - Use platform(libs.springboot2.bom) for dependency version management - Configure shadow JAR to merge Spring metadata files - Replace BootRun task with JavaExec in otel sample
1 parent eb456fe commit 6347304

File tree

10 files changed

+125
-30
lines changed

10 files changed

+125
-30
lines changed

gradle/libs.versions.toml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ detekt = { id = "io.gitlab.arturbosch.detekt", version = "1.23.8" }
6161
jacoco-android = { id = "com.mxalbert.gradle.jacoco-android", version = "0.2.0" }
6262
kover = { id = "org.jetbrains.kotlinx.kover", version = "0.7.3" }
6363
vanniktech-maven-publish = { id = "com.vanniktech.maven.publish", version = "0.30.0" }
64-
springboot2 = { id = "org.springframework.boot", version.ref = "springboot2" }
64+
shadow = { id = "com.gradleup.shadow", version = "9.4.1" }
6565
springboot3 = { id = "org.springframework.boot", version.ref = "springboot3" }
6666
springboot4 = { id = "org.springframework.boot", version.ref = "springboot4" }
6767
spring-dependency-management = { id = "io.spring.dependency-management", version = "1.1.7" }
@@ -158,6 +158,7 @@ slf4j-api = { module = "org.slf4j:slf4j-api", version.ref = "slf4j" }
158158
slf4j-jdk14 = { module = "org.slf4j:slf4j-jdk14", version.ref = "slf4j" }
159159
slf4j2-api = { module = "org.slf4j:slf4j-api", version = "2.0.5" }
160160
spotlessLib = { module = "com.diffplug.spotless:com.diffplug.spotless.gradle.plugin", version.ref = "spotless"}
161+
springboot2-bom = { module = "org.springframework.boot:spring-boot-dependencies", version.ref = "springboot2" }
161162
springboot-starter = { module = "org.springframework.boot:spring-boot-starter", version.ref = "springboot2" }
162163
springboot-starter-graphql = { module = "org.springframework.boot:spring-boot-starter-graphql", version.ref = "springboot2" }
163164
springboot-starter-quartz = { module = "org.springframework.boot:spring-boot-starter-quartz", version.ref = "springboot2" }

sentry-samples/sentry-samples-netflix-dgs/build.gradle.kts

Lines changed: 23 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,15 @@ import org.jetbrains.kotlin.config.KotlinCompilerVersion
22
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
33

44
plugins {
5-
alias(libs.plugins.springboot2)
6-
alias(libs.plugins.spring.dependency.management)
5+
java
6+
application
7+
alias(libs.plugins.shadow)
78
alias(libs.plugins.kotlin.jvm)
89
alias(libs.plugins.kotlin.spring)
910
}
1011

12+
application { mainClass.set("io.sentry.samples.netflix.dgs.NetlixDgsApplication") }
13+
1114
group = "io.sentry.sample.spring-boot"
1215

1316
version = "0.0.1-SNAPSHOT"
@@ -19,6 +22,7 @@ java.targetCompatibility = JavaVersion.VERSION_1_8
1922
repositories { mavenCentral() }
2023

2124
dependencies {
25+
implementation(platform(libs.springboot2.bom))
2226
implementation(libs.springboot.starter.web)
2327
implementation(Config.Libs.kotlinReflect)
2428
implementation(kotlin(Config.kotlinStdLib, KotlinCompilerVersion.VERSION))
@@ -32,6 +36,23 @@ dependencies {
3236
}
3337
}
3438

39+
// Configure the Shadow JAR (executable JAR with all dependencies)
40+
tasks.shadowJar {
41+
manifest { attributes["Main-Class"] = "io.sentry.samples.netflix.dgs.NetlixDgsApplication" }
42+
archiveClassifier.set("")
43+
mergeServiceFiles()
44+
append("META-INF/spring.handlers")
45+
append("META-INF/spring.schemas")
46+
append("META-INF/spring.factories")
47+
}
48+
49+
tasks.jar {
50+
enabled = false
51+
dependsOn(tasks.shadowJar)
52+
}
53+
54+
tasks.startScripts { dependsOn(tasks.shadowJar) }
55+
3556
tasks.withType<Test>().configureEach { useJUnitPlatform() }
3657

3758
tasks.withType<KotlinCompile>().configureEach {

sentry-samples/sentry-samples-spring-boot-opentelemetry-noagent/build.gradle.kts

Lines changed: 23 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,15 @@ import org.jetbrains.kotlin.config.KotlinCompilerVersion
22
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
33

44
plugins {
5-
alias(libs.plugins.springboot2)
6-
alias(libs.plugins.spring.dependency.management)
5+
java
6+
application
7+
alias(libs.plugins.shadow)
78
alias(libs.plugins.kotlin.jvm)
89
alias(libs.plugins.kotlin.spring)
910
}
1011

12+
application { mainClass.set("io.sentry.samples.spring.boot.SentryDemoApplication") }
13+
1114
group = "io.sentry.sample.spring-boot"
1215

1316
version = "0.0.1-SNAPSHOT"
@@ -35,6 +38,8 @@ tasks.withType<KotlinCompile>().configureEach {
3538
}
3639

3740
dependencies {
41+
implementation(platform(libs.springboot2.bom))
42+
implementation(platform(libs.otel.instrumentation.bom))
3843
implementation(libs.springboot.starter)
3944
implementation(libs.springboot.starter.actuator)
4045
implementation(libs.springboot.starter.aop)
@@ -72,7 +77,22 @@ dependencies {
7277
testImplementation("org.apache.httpcomponents:httpclient")
7378
}
7479

75-
dependencyManagement { imports { mavenBom(libs.otel.instrumentation.bom.get().toString()) } }
80+
// Configure the Shadow JAR (executable JAR with all dependencies)
81+
tasks.shadowJar {
82+
manifest { attributes["Main-Class"] = "io.sentry.samples.spring.boot.SentryDemoApplication" }
83+
archiveClassifier.set("")
84+
mergeServiceFiles()
85+
append("META-INF/spring.handlers")
86+
append("META-INF/spring.schemas")
87+
append("META-INF/spring.factories")
88+
}
89+
90+
tasks.jar {
91+
enabled = false
92+
dependsOn(tasks.shadowJar)
93+
}
94+
95+
tasks.startScripts { dependsOn(tasks.shadowJar) }
7696

7797
configure<SourceSetContainer> { test { java.srcDir("src/test/java") } }
7898

sentry-samples/sentry-samples-spring-boot-opentelemetry/build.gradle.kts

Lines changed: 26 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,16 @@
11
import org.jetbrains.kotlin.config.KotlinCompilerVersion
22
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
3-
import org.springframework.boot.gradle.tasks.run.BootRun
43

54
plugins {
6-
alias(libs.plugins.springboot2)
7-
alias(libs.plugins.spring.dependency.management)
5+
java
6+
application
7+
alias(libs.plugins.shadow)
88
alias(libs.plugins.kotlin.jvm)
99
alias(libs.plugins.kotlin.spring)
1010
}
1111

12+
application { mainClass.set("io.sentry.samples.spring.boot.SentryDemoApplication") }
13+
1214
group = "io.sentry.sample.spring-boot"
1315

1416
version = "0.0.1-SNAPSHOT"
@@ -33,6 +35,7 @@ tasks.withType<KotlinCompile>().configureEach {
3335
}
3436

3537
dependencies {
38+
implementation(platform(libs.springboot2.bom))
3639
implementation(libs.springboot.starter)
3740
implementation(libs.springboot.starter.actuator)
3841
implementation(libs.springboot.starter.aop)
@@ -70,14 +73,30 @@ dependencies {
7073
testImplementation("org.apache.httpcomponents:httpclient")
7174
}
7275

76+
// Configure the Shadow JAR (executable JAR with all dependencies)
77+
tasks.shadowJar {
78+
manifest { attributes["Main-Class"] = "io.sentry.samples.spring.boot.SentryDemoApplication" }
79+
archiveClassifier.set("")
80+
mergeServiceFiles()
81+
append("META-INF/spring.handlers")
82+
append("META-INF/spring.schemas")
83+
append("META-INF/spring.factories")
84+
}
85+
86+
tasks.jar {
87+
enabled = false
88+
dependsOn(tasks.shadowJar)
89+
}
90+
91+
tasks.startScripts { dependsOn(tasks.shadowJar) }
92+
7393
configure<SourceSetContainer> { test { java.srcDir("src/test/java") } }
7494

75-
tasks.register<BootRun>("bootRunWithAgent").configure {
95+
tasks.register<JavaExec>("bootRunWithAgent").configure {
7696
group = "application"
7797

78-
val mainBootRunTask = tasks.getByName<BootRun>("bootRun")
79-
mainClass = mainBootRunTask.mainClass
80-
classpath = mainBootRunTask.classpath
98+
mainClass.set("io.sentry.samples.spring.boot.SentryDemoApplication")
99+
classpath = sourceSets["main"].runtimeClasspath
81100

82101
val versionName = project.properties["versionName"] as String
83102
val agentJarPath =

sentry-samples/sentry-samples-spring-boot-webflux/build.gradle.kts

Lines changed: 23 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,15 @@ import org.jetbrains.kotlin.config.KotlinCompilerVersion
22
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
33

44
plugins {
5-
alias(libs.plugins.springboot2)
6-
alias(libs.plugins.spring.dependency.management)
5+
java
6+
application
7+
alias(libs.plugins.shadow)
78
alias(libs.plugins.kotlin.jvm)
89
alias(libs.plugins.kotlin.spring)
910
}
1011

12+
application { mainClass.set("io.sentry.samples.spring.boot.SentryDemoApplication") }
13+
1114
group = "io.sentry.sample.spring-boot"
1215

1316
version = "0.0.1-SNAPSHOT"
@@ -19,6 +22,7 @@ java.targetCompatibility = JavaVersion.VERSION_17
1922
repositories { mavenCentral() }
2023

2124
dependencies {
25+
implementation(platform(libs.springboot2.bom))
2226
implementation(libs.springboot.starter.actuator)
2327
implementation(libs.springboot.starter.graphql)
2428
implementation(libs.springboot.starter.webflux)
@@ -42,6 +46,23 @@ dependencies {
4246
testImplementation("org.apache.httpcomponents:httpclient")
4347
}
4448

49+
// Configure the Shadow JAR (executable JAR with all dependencies)
50+
tasks.shadowJar {
51+
manifest { attributes["Main-Class"] = "io.sentry.samples.spring.boot.SentryDemoApplication" }
52+
archiveClassifier.set("")
53+
mergeServiceFiles()
54+
append("META-INF/spring.handlers")
55+
append("META-INF/spring.schemas")
56+
append("META-INF/spring.factories")
57+
}
58+
59+
tasks.jar {
60+
enabled = false
61+
dependsOn(tasks.shadowJar)
62+
}
63+
64+
tasks.startScripts { dependsOn(tasks.shadowJar) }
65+
4566
configure<SourceSetContainer> { test { java.srcDir("src/test/java") } }
4667

4768
tasks.withType<KotlinCompile>().configureEach {

sentry-samples/sentry-samples-spring-boot/build.gradle.kts

Lines changed: 23 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,15 @@ import org.jetbrains.kotlin.config.KotlinCompilerVersion
22
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
33

44
plugins {
5-
alias(libs.plugins.springboot2)
6-
alias(libs.plugins.spring.dependency.management)
5+
java
6+
application
7+
alias(libs.plugins.shadow)
78
alias(libs.plugins.kotlin.jvm)
89
alias(libs.plugins.kotlin.spring)
910
}
1011

12+
application { mainClass.set("io.sentry.samples.spring.boot.SentryDemoApplication") }
13+
1114
group = "io.sentry.sample.spring-boot"
1215

1316
version = "0.0.1-SNAPSHOT"
@@ -31,6 +34,7 @@ tasks.withType<KotlinCompile>().configureEach {
3134
}
3235

3336
dependencies {
37+
implementation(platform(libs.springboot2.bom))
3438
implementation(libs.springboot.starter)
3539
implementation(libs.springboot.starter.actuator)
3640
implementation(libs.springboot.starter.aop)
@@ -69,6 +73,23 @@ dependencies {
6973
testImplementation("org.apache.httpcomponents:httpclient")
7074
}
7175

76+
// Configure the Shadow JAR (executable JAR with all dependencies)
77+
tasks.shadowJar {
78+
manifest { attributes["Main-Class"] = "io.sentry.samples.spring.boot.SentryDemoApplication" }
79+
archiveClassifier.set("")
80+
mergeServiceFiles()
81+
append("META-INF/spring.handlers")
82+
append("META-INF/spring.schemas")
83+
append("META-INF/spring.factories")
84+
}
85+
86+
tasks.jar {
87+
enabled = false
88+
dependsOn(tasks.shadowJar)
89+
}
90+
91+
tasks.startScripts { dependsOn(tasks.shadowJar) }
92+
7293
configure<SourceSetContainer> { test { java.srcDir("src/test/java") } }
7394

7495
tasks.register<Test>("systemTest").configure {

sentry-samples/sentry-samples-spring/build.gradle.kts

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,7 @@
11
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
2-
import org.springframework.boot.gradle.plugin.SpringBootPlugin.BOM_COORDINATES
32

43
plugins {
54
application
6-
alias(libs.plugins.springboot2) apply false
75
alias(libs.plugins.spring.dependency.management)
86
alias(libs.plugins.kotlin.jvm)
97
alias(libs.plugins.kotlin.spring)
@@ -29,7 +27,7 @@ repositories { mavenCentral() }
2927

3028
dependencyManagement {
3129
imports {
32-
mavenBom(BOM_COORDINATES)
30+
mavenBom(libs.springboot2.bom.get().toString())
3331
mavenBom(libs.kotlin.bom.get().toString())
3432
mavenBom(libs.jackson.bom.get().toString())
3533
}

sentry-spring-boot-starter/build.gradle.kts

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
import net.ltgt.gradle.errorprone.errorprone
22
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
3-
import org.springframework.boot.gradle.plugin.SpringBootPlugin
43

54
plugins {
65
`java-library`
@@ -9,7 +8,6 @@ plugins {
98
jacoco
109
alias(libs.plugins.errorprone)
1110
alias(libs.plugins.gradle.versions)
12-
alias(libs.plugins.springboot2) apply false
1311
}
1412

1513
tasks.withType<KotlinCompile>().configureEach {
@@ -22,7 +20,7 @@ dependencies {
2220
api(projects.sentrySpringBoot)
2321
api(libs.springboot.starter)
2422

25-
annotationProcessor(platform(SpringBootPlugin.BOM_COORDINATES))
23+
annotationProcessor(platform(libs.springboot2.bom))
2624
annotationProcessor(Config.AnnotationProcessors.springBootAutoConfigure)
2725
annotationProcessor(Config.AnnotationProcessors.springBootConfiguration)
2826

sentry-spring-boot/build.gradle.kts

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
import net.ltgt.gradle.errorprone.errorprone
22
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
3-
import org.springframework.boot.gradle.plugin.SpringBootPlugin
43

54
plugins {
65
`java-library`
@@ -10,7 +9,6 @@ plugins {
109
alias(libs.plugins.errorprone)
1110
alias(libs.plugins.gradle.versions)
1211
alias(libs.plugins.buildconfig)
13-
alias(libs.plugins.springboot2) apply false
1412
}
1513

1614
tasks.withType<KotlinCompile>().configureEach {
@@ -40,14 +38,14 @@ dependencies {
4038
compileOnly(libs.springboot.starter.graphql)
4139
compileOnly(libs.springboot.starter.quartz)
4240
compileOnly(libs.springboot.starter.security)
43-
compileOnly(platform(SpringBootPlugin.BOM_COORDINATES))
41+
compileOnly(platform(libs.springboot2.bom))
4442
compileOnly(Config.Libs.springWeb)
4543
compileOnly(Config.Libs.springWebflux)
4644
compileOnly(projects.sentryOpentelemetry.sentryOpentelemetryCore)
4745
compileOnly(projects.sentryGraphql)
4846
compileOnly(projects.sentryQuartz)
4947

50-
annotationProcessor(platform(SpringBootPlugin.BOM_COORDINATES))
48+
annotationProcessor(platform(libs.springboot2.bom))
5149
annotationProcessor(Config.AnnotationProcessors.springBootAutoConfigure)
5250
annotationProcessor(Config.AnnotationProcessors.springBootConfiguration)
5351

sentry-spring/build.gradle.kts

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
import net.ltgt.gradle.errorprone.errorprone
22
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
3-
import org.springframework.boot.gradle.plugin.SpringBootPlugin
43

54
plugins {
65
`java-library`
@@ -10,7 +9,6 @@ plugins {
109
alias(libs.plugins.errorprone)
1110
alias(libs.plugins.gradle.versions)
1211
alias(libs.plugins.buildconfig)
13-
alias(libs.plugins.springboot2) apply false
1412
}
1513

1614
tasks.withType<KotlinCompile>().configureEach {
@@ -22,7 +20,7 @@ tasks.withType<KotlinCompile>().configureEach {
2220
dependencies {
2321
api(projects.sentry)
2422

25-
compileOnly(platform(SpringBootPlugin.BOM_COORDINATES))
23+
compileOnly(platform(libs.springboot2.bom))
2624
compileOnly(Config.Libs.springWeb)
2725
compileOnly(Config.Libs.springAop)
2826
compileOnly(Config.Libs.springSecurityWeb)

0 commit comments

Comments
 (0)