diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 82fac63ad05..70631b58c82 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -11,7 +11,7 @@ feign = "11.6" jacoco = "0.8.7" jackson = "2.18.3" jetbrainsCompose = "1.6.11" -kotlin = "2.2.0" +kotlin = "1.9.24" kotlinSpring7 = "2.2.0" kotlin-compatible-version = "1.9" ktorClient = "3.0.0" diff --git a/sentry-android-integration-tests/sentry-uitest-android-critical/build.gradle.kts b/sentry-android-integration-tests/sentry-uitest-android-critical/build.gradle.kts index 4b0cd68ca90..258a4b45027 100644 --- a/sentry-android-integration-tests/sentry-uitest-android-critical/build.gradle.kts +++ b/sentry-android-integration-tests/sentry-uitest-android-critical/build.gradle.kts @@ -3,7 +3,7 @@ import io.gitlab.arturbosch.detekt.Detekt plugins { id("com.android.application") alias(libs.plugins.kotlin.android) - alias(libs.plugins.kotlin.compose) + // alias(libs.plugins.kotlin.compose) } android { diff --git a/sentry-android-integration-tests/sentry-uitest-android/build.gradle.kts b/sentry-android-integration-tests/sentry-uitest-android/build.gradle.kts index 0c32cbad941..d3b2bdbd421 100644 --- a/sentry-android-integration-tests/sentry-uitest-android/build.gradle.kts +++ b/sentry-android-integration-tests/sentry-uitest-android/build.gradle.kts @@ -4,7 +4,7 @@ import net.ltgt.gradle.errorprone.errorprone plugins { id("com.android.application") alias(libs.plugins.kotlin.android) - alias(libs.plugins.kotlin.compose) + // alias(libs.plugins.kotlin.compose) alias(libs.plugins.errorprone) alias(libs.plugins.gradle.versions) alias(libs.plugins.detekt) diff --git a/sentry-android-replay/build.gradle.kts b/sentry-android-replay/build.gradle.kts index 30afc911910..b8554ae44de 100644 --- a/sentry-android-replay/build.gradle.kts +++ b/sentry-android-replay/build.gradle.kts @@ -5,7 +5,7 @@ import org.jetbrains.kotlin.gradle.tasks.KotlinCompilationTask plugins { id("com.android.library") alias(libs.plugins.kotlin.android) - alias(libs.plugins.kotlin.compose) + // alias(libs.plugins.kotlin.compose) jacoco alias(libs.plugins.jacoco.android) alias(libs.plugins.gradle.versions) diff --git a/sentry-compose/build.gradle.kts b/sentry-compose/build.gradle.kts index 0ebd0aa2815..a5666b4c566 100644 --- a/sentry-compose/build.gradle.kts +++ b/sentry-compose/build.gradle.kts @@ -19,10 +19,10 @@ kotlin { androidTarget { publishLibraryVariants("release") - compilerOptions { jvmTarget.set(org.jetbrains.kotlin.gradle.dsl.JvmTarget.fromTarget("1.8")) } + compilations.all { kotlinOptions.jvmTarget = JavaVersion.VERSION_1_8.toString() } } jvm("desktop") { - compilerOptions { jvmTarget.set(org.jetbrains.kotlin.gradle.dsl.JvmTarget.fromTarget("1.8")) } + compilations.all { kotlinOptions.jvmTarget = JavaVersion.VERSION_1_8.toString() } } sourceSets.all { diff --git a/sentry-samples/sentry-samples-android/build.gradle.kts b/sentry-samples/sentry-samples-android/build.gradle.kts index 56f270d235b..613dd2e5799 100644 --- a/sentry-samples/sentry-samples-android/build.gradle.kts +++ b/sentry-samples/sentry-samples-android/build.gradle.kts @@ -6,7 +6,7 @@ import org.gradle.internal.extensions.stdlib.capitalized plugins { id("com.android.application") alias(libs.plugins.kotlin.android) - alias(libs.plugins.kotlin.compose) + // alias(libs.plugins.kotlin.compose) } android { diff --git a/sentry-samples/sentry-samples-spring-7/build.gradle.kts b/sentry-samples/sentry-samples-spring-7/build.gradle.kts index 2c0ce2a1422..f1565124743 100644 --- a/sentry-samples/sentry-samples-spring-7/build.gradle.kts +++ b/sentry-samples/sentry-samples-spring-7/build.gradle.kts @@ -46,7 +46,12 @@ tasks.withType().configureEach { useJUnitPlatform() } tasks.withType().configureEach { kotlin { - compilerOptions.freeCompilerArgs = listOf("-Xjsr305=strict") + explicitApi() + // skip metadata version check, as Spring 7 / Spring Boot 4 is + // compiled against a newer version of Kotlin + compilerOptions.freeCompilerArgs = listOf("-Xjsr305=strict", "-Xskip-metadata-version-check") compilerOptions.jvmTarget = org.jetbrains.kotlin.gradle.dsl.JvmTarget.JVM_17 + compilerOptions.languageVersion = org.jetbrains.kotlin.gradle.dsl.KotlinVersion.KOTLIN_1_9 + compilerOptions.apiVersion = org.jetbrains.kotlin.gradle.dsl.KotlinVersion.KOTLIN_1_9 } } diff --git a/sentry-samples/sentry-samples-spring-7/src/main/java/io/sentry/samples/spring/jakarta/SecurityConfiguration.java b/sentry-samples/sentry-samples-spring-7/src/main/java/io/sentry/samples/spring/jakarta/SecurityConfiguration.java index d6c8a315583..12085aa3b65 100644 --- a/sentry-samples/sentry-samples-spring-7/src/main/java/io/sentry/samples/spring/jakarta/SecurityConfiguration.java +++ b/sentry-samples/sentry-samples-spring-7/src/main/java/io/sentry/samples/spring/jakarta/SecurityConfiguration.java @@ -20,9 +20,10 @@ public class SecurityConfiguration { @SuppressWarnings({"lgtm[java/spring-disabled-csrf-protection]", "removal"}) @Bean public SecurityFilterChain filterChain(final @NotNull HttpSecurity http) throws Exception { - http.csrf().disable().authorizeHttpRequests().anyRequest().authenticated().and().httpBasic(); - - return http.build(); + return http.csrf((csrf) -> csrf.disable()) + .authorizeHttpRequests((r) -> r.anyRequest().authenticated()) + .httpBasic((h) -> {}) + .build(); } @Bean diff --git a/sentry-samples/sentry-samples-spring-boot-4-opentelemetry-noagent/build.gradle.kts b/sentry-samples/sentry-samples-spring-boot-4-opentelemetry-noagent/build.gradle.kts index 7614a3ed35e..107098fa096 100644 --- a/sentry-samples/sentry-samples-spring-boot-4-opentelemetry-noagent/build.gradle.kts +++ b/sentry-samples/sentry-samples-spring-boot-4-opentelemetry-noagent/build.gradle.kts @@ -24,10 +24,14 @@ configure { } tasks.withType().configureEach { - compilerOptions.jvmTarget = org.jetbrains.kotlin.gradle.dsl.JvmTarget.JVM_17 kotlin { - compilerOptions.freeCompilerArgs = listOf("-Xjsr305=strict") + explicitApi() + // skip metadata version check, as Spring 7 / Spring Boot 4 is + // compiled against a newer version of Kotlin + compilerOptions.freeCompilerArgs = listOf("-Xjsr305=strict", "-Xskip-metadata-version-check") compilerOptions.jvmTarget = org.jetbrains.kotlin.gradle.dsl.JvmTarget.JVM_17 + compilerOptions.languageVersion = org.jetbrains.kotlin.gradle.dsl.KotlinVersion.KOTLIN_1_9 + compilerOptions.apiVersion = org.jetbrains.kotlin.gradle.dsl.KotlinVersion.KOTLIN_1_9 } } @@ -42,6 +46,7 @@ dependencies { implementation(libs.springboot4.starter.web) implementation(libs.springboot4.starter.webflux) implementation(libs.springboot4.starter.websocket) + implementation(libs.springboot4.starter.restclient) implementation(Config.Libs.aspectj) implementation(Config.Libs.kotlinReflect) implementation(kotlin(Config.kotlinStdLib, KotlinCompilerVersion.VERSION)) diff --git a/sentry-samples/sentry-samples-spring-boot-4-opentelemetry-noagent/src/main/java/io/sentry/samples/spring/boot/jakarta/SecurityConfiguration.java b/sentry-samples/sentry-samples-spring-boot-4-opentelemetry-noagent/src/main/java/io/sentry/samples/spring/boot/jakarta/SecurityConfiguration.java index e5987c8f4a2..9551bf2260b 100644 --- a/sentry-samples/sentry-samples-spring-boot-4-opentelemetry-noagent/src/main/java/io/sentry/samples/spring/boot/jakarta/SecurityConfiguration.java +++ b/sentry-samples/sentry-samples-spring-boot-4-opentelemetry-noagent/src/main/java/io/sentry/samples/spring/boot/jakarta/SecurityConfiguration.java @@ -18,9 +18,10 @@ public class SecurityConfiguration { @SuppressWarnings({"lgtm[java/spring-disabled-csrf-protection]", "removal"}) @Bean public SecurityFilterChain filterChain(final @NotNull HttpSecurity http) throws Exception { - http.csrf().disable().authorizeHttpRequests().anyRequest().authenticated().and().httpBasic(); - - return http.build(); + return http.csrf((csrf) -> csrf.disable()) + .authorizeHttpRequests((r) -> r.anyRequest().authenticated()) + .httpBasic((h) -> {}) + .build(); } @Bean diff --git a/sentry-samples/sentry-samples-spring-boot-4-opentelemetry-noagent/src/main/java/io/sentry/samples/spring/boot/jakarta/SentryDemoApplication.java b/sentry-samples/sentry-samples-spring-boot-4-opentelemetry-noagent/src/main/java/io/sentry/samples/spring/boot/jakarta/SentryDemoApplication.java index 7f412eaa0d6..dc69256c020 100644 --- a/sentry-samples/sentry-samples-spring-boot-4-opentelemetry-noagent/src/main/java/io/sentry/samples/spring/boot/jakarta/SentryDemoApplication.java +++ b/sentry-samples/sentry-samples-spring-boot-4-opentelemetry-noagent/src/main/java/io/sentry/samples/spring/boot/jakarta/SentryDemoApplication.java @@ -10,7 +10,7 @@ import org.quartz.SimpleTrigger; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.boot.web.client.RestTemplateBuilder; +import org.springframework.boot.restclient.RestTemplateBuilder; import org.springframework.context.annotation.Bean; import org.springframework.scheduling.annotation.EnableScheduling; import org.springframework.scheduling.quartz.CronTriggerFactoryBean; diff --git a/sentry-samples/sentry-samples-spring-boot-4-opentelemetry/build.gradle.kts b/sentry-samples/sentry-samples-spring-boot-4-opentelemetry/build.gradle.kts index 632b0d90512..c1626053bc2 100644 --- a/sentry-samples/sentry-samples-spring-boot-4-opentelemetry/build.gradle.kts +++ b/sentry-samples/sentry-samples-spring-boot-4-opentelemetry/build.gradle.kts @@ -24,14 +24,15 @@ configure { targetCompatibility = JavaVersion.VERSION_17 } -tasks.withType().configureEach { - compilerOptions.jvmTarget = org.jetbrains.kotlin.gradle.dsl.JvmTarget.JVM_17 -} - tasks.withType().configureEach { kotlin { - compilerOptions.freeCompilerArgs = listOf("-Xjsr305=strict") + explicitApi() + // skip metadata version check, as Spring 7 / Spring Boot 4 is + // compiled against a newer version of Kotlin + compilerOptions.freeCompilerArgs = listOf("-Xjsr305=strict", "-Xskip-metadata-version-check") compilerOptions.jvmTarget = org.jetbrains.kotlin.gradle.dsl.JvmTarget.JVM_17 + compilerOptions.languageVersion = org.jetbrains.kotlin.gradle.dsl.KotlinVersion.KOTLIN_1_9 + compilerOptions.apiVersion = org.jetbrains.kotlin.gradle.dsl.KotlinVersion.KOTLIN_1_9 } } @@ -46,6 +47,7 @@ dependencies { implementation(libs.springboot4.starter.web) implementation(libs.springboot4.starter.webflux) implementation(libs.springboot4.starter.websocket) + implementation(libs.springboot4.starter.restclient) implementation(Config.Libs.aspectj) implementation(Config.Libs.kotlinReflect) implementation(kotlin(Config.kotlinStdLib, KotlinCompilerVersion.VERSION)) diff --git a/sentry-samples/sentry-samples-spring-boot-4-opentelemetry/src/main/java/io/sentry/samples/spring/boot/jakarta/SecurityConfiguration.java b/sentry-samples/sentry-samples-spring-boot-4-opentelemetry/src/main/java/io/sentry/samples/spring/boot/jakarta/SecurityConfiguration.java index e5987c8f4a2..9551bf2260b 100644 --- a/sentry-samples/sentry-samples-spring-boot-4-opentelemetry/src/main/java/io/sentry/samples/spring/boot/jakarta/SecurityConfiguration.java +++ b/sentry-samples/sentry-samples-spring-boot-4-opentelemetry/src/main/java/io/sentry/samples/spring/boot/jakarta/SecurityConfiguration.java @@ -18,9 +18,10 @@ public class SecurityConfiguration { @SuppressWarnings({"lgtm[java/spring-disabled-csrf-protection]", "removal"}) @Bean public SecurityFilterChain filterChain(final @NotNull HttpSecurity http) throws Exception { - http.csrf().disable().authorizeHttpRequests().anyRequest().authenticated().and().httpBasic(); - - return http.build(); + return http.csrf((csrf) -> csrf.disable()) + .authorizeHttpRequests((r) -> r.anyRequest().authenticated()) + .httpBasic((h) -> {}) + .build(); } @Bean diff --git a/sentry-samples/sentry-samples-spring-boot-4-opentelemetry/src/main/java/io/sentry/samples/spring/boot/jakarta/SentryDemoApplication.java b/sentry-samples/sentry-samples-spring-boot-4-opentelemetry/src/main/java/io/sentry/samples/spring/boot/jakarta/SentryDemoApplication.java index a6eb46f4c74..50f8efad4a3 100644 --- a/sentry-samples/sentry-samples-spring-boot-4-opentelemetry/src/main/java/io/sentry/samples/spring/boot/jakarta/SentryDemoApplication.java +++ b/sentry-samples/sentry-samples-spring-boot-4-opentelemetry/src/main/java/io/sentry/samples/spring/boot/jakarta/SentryDemoApplication.java @@ -10,7 +10,7 @@ import org.quartz.SimpleTrigger; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.boot.web.client.RestTemplateBuilder; +import org.springframework.boot.restclient.RestTemplateBuilder; import org.springframework.context.annotation.Bean; import org.springframework.scheduling.annotation.EnableScheduling; import org.springframework.scheduling.quartz.CronTriggerFactoryBean; diff --git a/sentry-samples/sentry-samples-spring-boot-4-webflux/build.gradle.kts b/sentry-samples/sentry-samples-spring-boot-4-webflux/build.gradle.kts index 44a37e1c598..e6193b35c88 100644 --- a/sentry-samples/sentry-samples-spring-boot-4-webflux/build.gradle.kts +++ b/sentry-samples/sentry-samples-spring-boot-4-webflux/build.gradle.kts @@ -46,8 +46,13 @@ configure { test { java.srcDir("src/test/java") } } tasks.withType().configureEach { kotlin { - compilerOptions.freeCompilerArgs = listOf("-Xjsr305=strict") + explicitApi() + // skip metadata version check, as Spring 7 / Spring Boot 4 is + // compiled against a newer version of Kotlin + compilerOptions.freeCompilerArgs = listOf("-Xjsr305=strict", "-Xskip-metadata-version-check") compilerOptions.jvmTarget = org.jetbrains.kotlin.gradle.dsl.JvmTarget.JVM_17 + compilerOptions.languageVersion = org.jetbrains.kotlin.gradle.dsl.KotlinVersion.KOTLIN_1_9 + compilerOptions.apiVersion = org.jetbrains.kotlin.gradle.dsl.KotlinVersion.KOTLIN_1_9 } } diff --git a/sentry-samples/sentry-samples-spring-boot-4/build.gradle.kts b/sentry-samples/sentry-samples-spring-boot-4/build.gradle.kts index 049140d4726..eb35bc8bb09 100644 --- a/sentry-samples/sentry-samples-spring-boot-4/build.gradle.kts +++ b/sentry-samples/sentry-samples-spring-boot-4/build.gradle.kts @@ -23,14 +23,15 @@ configure { targetCompatibility = JavaVersion.VERSION_17 } -tasks.withType().configureEach { - compilerOptions.jvmTarget = org.jetbrains.kotlin.gradle.dsl.JvmTarget.JVM_17 -} - tasks.withType().configureEach { kotlin { - compilerOptions.freeCompilerArgs = listOf("-Xjsr305=strict") + explicitApi() + // skip metadata version check, as Spring 7 / Spring Boot 4 is + // compiled against a newer version of Kotlin + compilerOptions.freeCompilerArgs = listOf("-Xjsr305=strict", "-Xskip-metadata-version-check") compilerOptions.jvmTarget = org.jetbrains.kotlin.gradle.dsl.JvmTarget.JVM_17 + compilerOptions.languageVersion = org.jetbrains.kotlin.gradle.dsl.KotlinVersion.KOTLIN_1_9 + compilerOptions.apiVersion = org.jetbrains.kotlin.gradle.dsl.KotlinVersion.KOTLIN_1_9 } } @@ -45,6 +46,7 @@ dependencies { implementation(libs.springboot4.starter.web) implementation(libs.springboot4.starter.webflux) implementation(libs.springboot4.starter.websocket) + implementation(libs.springboot4.starter.restclient) implementation(Config.Libs.aspectj) implementation(Config.Libs.kotlinReflect) implementation(kotlin(Config.kotlinStdLib, KotlinCompilerVersion.VERSION)) diff --git a/sentry-samples/sentry-samples-spring-boot-4/src/main/java/io/sentry/samples/spring/boot/jakarta/SecurityConfiguration.java b/sentry-samples/sentry-samples-spring-boot-4/src/main/java/io/sentry/samples/spring/boot/jakarta/SecurityConfiguration.java index e5987c8f4a2..9551bf2260b 100644 --- a/sentry-samples/sentry-samples-spring-boot-4/src/main/java/io/sentry/samples/spring/boot/jakarta/SecurityConfiguration.java +++ b/sentry-samples/sentry-samples-spring-boot-4/src/main/java/io/sentry/samples/spring/boot/jakarta/SecurityConfiguration.java @@ -18,9 +18,10 @@ public class SecurityConfiguration { @SuppressWarnings({"lgtm[java/spring-disabled-csrf-protection]", "removal"}) @Bean public SecurityFilterChain filterChain(final @NotNull HttpSecurity http) throws Exception { - http.csrf().disable().authorizeHttpRequests().anyRequest().authenticated().and().httpBasic(); - - return http.build(); + return http.csrf((csrf) -> csrf.disable()) + .authorizeHttpRequests((r) -> r.anyRequest().authenticated()) + .httpBasic((h) -> {}) + .build(); } @Bean diff --git a/sentry-samples/sentry-samples-spring-boot-4/src/main/java/io/sentry/samples/spring/boot/jakarta/SentryDemoApplication.java b/sentry-samples/sentry-samples-spring-boot-4/src/main/java/io/sentry/samples/spring/boot/jakarta/SentryDemoApplication.java index 8050cb8e74c..2c63a9c66bc 100644 --- a/sentry-samples/sentry-samples-spring-boot-4/src/main/java/io/sentry/samples/spring/boot/jakarta/SentryDemoApplication.java +++ b/sentry-samples/sentry-samples-spring-boot-4/src/main/java/io/sentry/samples/spring/boot/jakarta/SentryDemoApplication.java @@ -8,7 +8,7 @@ import org.quartz.SimpleTrigger; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.boot.web.client.RestTemplateBuilder; +import org.springframework.boot.restclient.RestTemplateBuilder; import org.springframework.context.annotation.Bean; import org.springframework.scheduling.annotation.EnableScheduling; import org.springframework.scheduling.quartz.CronTriggerFactoryBean; diff --git a/sentry-servlet-jakarta/src/test/kotlin/io/sentry/servlet/jakarta/SentryRequestHttpServletRequestProcessorTest.kt b/sentry-servlet-jakarta/src/test/kotlin/io/sentry/servlet/jakarta/SentryRequestHttpServletRequestProcessorTest.kt index 9fd1ae6a21e..3e420aa1dfb 100644 --- a/sentry-servlet-jakarta/src/test/kotlin/io/sentry/servlet/jakarta/SentryRequestHttpServletRequestProcessorTest.kt +++ b/sentry-servlet-jakarta/src/test/kotlin/io/sentry/servlet/jakarta/SentryRequestHttpServletRequestProcessorTest.kt @@ -145,7 +145,7 @@ fun toRequestUrl(uri: URI): StringBuffer? { url.append(':').append(port) } - if (uri?.isNotBlank()) { + if (uri.isNotBlank()) { url.append(uri) } return url diff --git a/sentry-spring-7/build.gradle.kts b/sentry-spring-7/build.gradle.kts index 617369e8c4a..45a70b33a6b 100644 --- a/sentry-spring-7/build.gradle.kts +++ b/sentry-spring-7/build.gradle.kts @@ -57,11 +57,11 @@ dependencies { // tests testImplementation(projects.sentryTestSupport) testImplementation(projects.sentryGraphql) - testImplementation(kotlin(Config.kotlinStdLib, "2.2.0")) + testImplementation(kotlin(Config.kotlinStdLib)) testImplementation(libs.awaitility.kotlin.spring7) testImplementation(libs.context.propagation) testImplementation(libs.graphql.java24) - testImplementation(kotlin(Config.kotlinTestJunit, "2.2.0")) + testImplementation(libs.kotlin.test.junit) testImplementation(libs.mockito.kotlin.spring7) testImplementation(libs.mockito.inline) testImplementation(libs.springboot4.starter.aop) @@ -70,6 +70,8 @@ dependencies { testImplementation(libs.springboot4.starter.test) testImplementation(libs.springboot4.starter.web) testImplementation(libs.springboot4.starter.webflux) + testImplementation(libs.springboot4.starter.restclient) + testImplementation(libs.springboot4.starter.webclient) testImplementation(projects.sentryReactor) } @@ -129,8 +131,8 @@ tasks.jar { kotlin { explicitApi() compilerOptions { - // skip metadata version check, as androidx.sqlite:sqlite is compiled against a newer version of - // Kotlin + // skip metadata version check, as Spring 7 / Spring Boot 4 is + // compiled against a newer version of Kotlin freeCompilerArgs.add("-Xskip-metadata-version-check") } } diff --git a/sentry-spring-boot-4/build.gradle.kts b/sentry-spring-boot-4/build.gradle.kts index 026bcf9fb56..8bfbef7577d 100644 --- a/sentry-spring-boot-4/build.gradle.kts +++ b/sentry-spring-boot-4/build.gradle.kts @@ -7,8 +7,8 @@ plugins { id("io.sentry.javadoc") // alias(libs.plugins.kotlin.jvm) jacoco - alias(libs.plugins.kotlin.jvm.spring7) - alias(libs.plugins.kotlin.spring7) + alias(libs.plugins.kotlin.jvm) + alias(libs.plugins.kotlin.spring) alias(libs.plugins.errorprone) alias(libs.plugins.gradle.versions) alias(libs.plugins.buildconfig) @@ -23,7 +23,7 @@ configure { tasks.withType().configureEach { compilerOptions { jvmTarget.set(org.jetbrains.kotlin.gradle.dsl.JvmTarget.JVM_17) - languageVersion.set(org.jetbrains.kotlin.gradle.dsl.KotlinVersion.KOTLIN_2_1) + languageVersion.set(org.jetbrains.kotlin.gradle.dsl.KotlinVersion.KOTLIN_1_9) freeCompilerArgs.add("-Xjsr305=strict") } } @@ -94,6 +94,8 @@ dependencies { testImplementation(libs.springboot4.starter.test) testImplementation(libs.springboot4.starter.web) testImplementation(libs.springboot4.starter.webflux) + testImplementation(libs.springboot4.starter.restclient) + testImplementation(libs.springboot4.starter.webclient) } configure { test { java.srcDir("src/test/java") } } @@ -152,8 +154,8 @@ tasks.jar { kotlin { explicitApi() compilerOptions { - // skip metadata version check, as androidx.sqlite:sqlite is compiled against a newer version of - // Kotlin + // skip metadata version check, as Spring 7 / Spring Boot 4 is + // compiled against a newer version of Kotlin freeCompilerArgs.add("-Xskip-metadata-version-check") } } diff --git a/sentry-spring-boot-4/src/test/kotlin/io/sentry/spring/boot/jakarta/SentryAutoConfigurationTest.kt b/sentry-spring-boot-4/src/test/kotlin/io/sentry/spring/boot/jakarta/SentryAutoConfigurationTest.kt index 7b290a42880..de01ba828a0 100644 --- a/sentry-spring-boot-4/src/test/kotlin/io/sentry/spring/boot/jakarta/SentryAutoConfigurationTest.kt +++ b/sentry-spring-boot-4/src/test/kotlin/io/sentry/spring/boot/jakarta/SentryAutoConfigurationTest.kt @@ -24,6 +24,7 @@ import io.sentry.opentelemetry.agent.AgentMarker import io.sentry.protocol.SentryTransaction import io.sentry.protocol.User import io.sentry.quartz.SentryJobListener +import io.sentry.spring.boot4.BuildConfig import io.sentry.spring.jakarta.ContextTagsEventProcessor import io.sentry.spring.jakarta.HttpServletRequestSentryUserProvider import io.sentry.spring.jakarta.SentryExceptionResolver @@ -58,15 +59,15 @@ import org.quartz.core.QuartzScheduler import org.slf4j.MDC import org.springframework.aop.support.NameMatchMethodPointcut import org.springframework.boot.autoconfigure.AutoConfigurations -import org.springframework.boot.autoconfigure.quartz.QuartzAutoConfiguration -import org.springframework.boot.autoconfigure.quartz.SchedulerFactoryBeanCustomizer -import org.springframework.boot.autoconfigure.web.servlet.WebMvcAutoConfiguration import org.springframework.boot.context.annotation.UserConfigurations import org.springframework.boot.info.GitProperties +import org.springframework.boot.quartz.autoconfigure.QuartzAutoConfiguration +import org.springframework.boot.quartz.autoconfigure.SchedulerFactoryBeanCustomizer import org.springframework.boot.test.context.FilteredClassLoader import org.springframework.boot.test.context.assertj.ApplicationContextAssert import org.springframework.boot.test.context.runner.WebApplicationContextRunner import org.springframework.boot.web.servlet.FilterRegistrationBean +import org.springframework.boot.webmvc.autoconfigure.WebMvcAutoConfiguration import org.springframework.context.ApplicationContext import org.springframework.context.annotation.Bean import org.springframework.context.annotation.Configuration @@ -317,7 +318,7 @@ class SentryAutoConfigurationTest { assertThat(event.sdk).isNotNull val sdk = event.sdk!! assertThat(sdk.version).isEqualTo(BuildConfig.VERSION_NAME) - assertThat(sdk.name).isEqualTo(BuildConfig.SENTRY_SPRING_BOOT_JAKARTA_SDK_NAME) + assertThat(sdk.name).isEqualTo(BuildConfig.SENTRY_SPRING_BOOT_4_SDK_NAME) assertThat(sdk.packageSet).anyMatch { pkg -> pkg.name == "maven:io.sentry:sentry-spring-boot-starter-jakarta" && pkg.version == BuildConfig.VERSION_NAME diff --git a/sentry-spring-boot-4/src/test/kotlin/io/sentry/spring/boot/jakarta/SentrySpanRestTemplateCustomizerTest.kt b/sentry-spring-boot-4/src/test/kotlin/io/sentry/spring/boot/jakarta/SentrySpanRestTemplateCustomizerTest.kt index f7a7f55c5db..8621149932d 100644 --- a/sentry-spring-boot-4/src/test/kotlin/io/sentry/spring/boot/jakarta/SentrySpanRestTemplateCustomizerTest.kt +++ b/sentry-spring-boot-4/src/test/kotlin/io/sentry/spring/boot/jakarta/SentrySpanRestTemplateCustomizerTest.kt @@ -30,7 +30,7 @@ import org.mockito.kotlin.doAnswer import org.mockito.kotlin.mock import org.mockito.kotlin.verify import org.mockito.kotlin.whenever -import org.springframework.boot.web.client.RestTemplateBuilder +import org.springframework.boot.restclient.RestTemplateBuilder import org.springframework.http.HttpEntity import org.springframework.http.HttpHeaders import org.springframework.http.HttpMethod @@ -43,8 +43,8 @@ class SentrySpanRestTemplateCustomizerTest { val scopes = mock() val restTemplate = RestTemplateBuilder() - .setConnectTimeout(Duration.ofSeconds(2)) - .setReadTimeout(Duration.ofSeconds(2)) + .connectTimeout(Duration.ofSeconds(2)) + .readTimeout(Duration.ofSeconds(2)) .build() var mockServer = MockWebServer() val transaction: SentryTracer diff --git a/sentry-spring-boot-4/src/test/kotlin/io/sentry/spring/boot/jakarta/SentryWebfluxAutoConfigurationTest.kt b/sentry-spring-boot-4/src/test/kotlin/io/sentry/spring/boot/jakarta/SentryWebfluxAutoConfigurationTest.kt index fd47317d1d2..61ae6c62174 100644 --- a/sentry-spring-boot-4/src/test/kotlin/io/sentry/spring/boot/jakarta/SentryWebfluxAutoConfigurationTest.kt +++ b/sentry-spring-boot-4/src/test/kotlin/io/sentry/spring/boot/jakarta/SentryWebfluxAutoConfigurationTest.kt @@ -7,9 +7,9 @@ import io.sentry.spring.jakarta.webflux.SentryWebFilterWithThreadLocalAccessor import kotlin.test.Test import org.assertj.core.api.Assertions.assertThat import org.springframework.boot.autoconfigure.AutoConfigurations -import org.springframework.boot.autoconfigure.web.reactive.WebFluxAutoConfiguration import org.springframework.boot.test.context.FilteredClassLoader import org.springframework.boot.test.context.runner.ReactiveWebApplicationContextRunner +import org.springframework.boot.webflux.autoconfigure.WebFluxAutoConfiguration import reactor.core.scheduler.Schedulers class SentryWebfluxAutoConfigurationTest { diff --git a/sentry-spring-boot-4/src/test/kotlin/io/sentry/spring/boot/jakarta/it/SentrySpringIntegrationTest.kt b/sentry-spring-boot-4/src/test/kotlin/io/sentry/spring/boot/jakarta/it/SentrySpringIntegrationTest.kt index 89d378d2087..980a2b67da4 100644 --- a/sentry-spring-boot-4/src/test/kotlin/io/sentry/spring/boot/jakarta/it/SentrySpringIntegrationTest.kt +++ b/sentry-spring-boot-4/src/test/kotlin/io/sentry/spring/boot/jakarta/it/SentrySpringIntegrationTest.kt @@ -25,9 +25,8 @@ import org.slf4j.LoggerFactory import org.springframework.beans.factory.annotation.Autowired import org.springframework.boot.autoconfigure.SpringBootApplication import org.springframework.boot.test.context.SpringBootTest -import org.springframework.boot.test.mock.mockito.SpyBean -import org.springframework.boot.test.web.client.TestRestTemplate -import org.springframework.boot.test.web.server.LocalServerPort +import org.springframework.boot.web.server.test.LocalServerPort +import org.springframework.boot.web.server.test.client.TestRestTemplate import org.springframework.context.annotation.Bean import org.springframework.context.annotation.Configuration import org.springframework.http.HttpEntity @@ -44,6 +43,7 @@ import org.springframework.security.crypto.password.PasswordEncoder import org.springframework.security.provisioning.InMemoryUserDetailsManager import org.springframework.security.web.SecurityFilterChain import org.springframework.stereotype.Service +import org.springframework.test.context.bean.override.mockito.MockitoSpyBean import org.springframework.test.context.junit4.SpringRunner import org.springframework.web.bind.annotation.ControllerAdvice import org.springframework.web.bind.annotation.ExceptionHandler @@ -69,7 +69,7 @@ class SentrySpringIntegrationTest { @Autowired lateinit var transport: ITransport - @SpyBean lateinit var scopes: IScopes + @MockitoSpyBean lateinit var scopes: IScopes @LocalServerPort var port: Int? = null @@ -82,7 +82,7 @@ class SentrySpringIntegrationTest { fun `attaches request and user information to SentryEvents`() { val restTemplate = TestRestTemplate().withBasicAuth("user", "password") val headers = HttpHeaders() - headers["X-FORWARDED-FOR"] = listOf("169.128.0.1") + headers.put("X-FORWARDED-FOR", listOf("169.128.0.1")) val entity = HttpEntity(headers) restTemplate.exchange("http://localhost:$port/hello", HttpMethod.GET, entity, Void::class.java) @@ -148,7 +148,7 @@ class SentrySpringIntegrationTest { fun `attaches first ip address if multiple addresses exist in a header`() { val restTemplate = TestRestTemplate().withBasicAuth("user", "password") val headers = HttpHeaders() - headers["X-FORWARDED-FOR"] = listOf("169.128.0.1, 192.168.0.1") + headers.put("X-FORWARDED-FOR", listOf("169.128.0.1, 192.168.0.1")) val entity = HttpEntity(headers) restTemplate.exchange("http://localhost:$port/hello", HttpMethod.GET, entity, Void::class.java) @@ -334,7 +334,10 @@ open class SecurityConfiguration { @Bean @Throws(Exception::class) open fun filterChain(http: HttpSecurity): SecurityFilterChain { - http.csrf().disable().authorizeRequests().anyRequest().authenticated().and().httpBasic() + http + .csrf { it.disable() } + .authorizeHttpRequests { it.anyRequest().authenticated() } + .httpBasic {} return http.build() }