From 305dafe26f57e28fe3fb093acc1af049e9bb637b Mon Sep 17 00:00:00 2001 From: Alexander Dinauer Date: Wed, 8 Jul 2026 14:52:30 +0200 Subject: [PATCH 1/6] build: Add Java 8 API compatibility checks Apply Animal Sniffer to Java 8 JVM SDK modules and check them against the Codehaus Java 8 runtime signature. This catches references to newer JDK APIs while keeping the existing Android signature checks in place where they already apply. Refs GH-5741 --- gradle/libs.versions.toml | 1 + sentry-apache-http-client-5/build.gradle.kts | 5 +++++ sentry-apollo-3/build.gradle.kts | 1 + sentry-apollo-4/build.gradle.kts | 1 + sentry-apollo/build.gradle.kts | 1 + sentry-async-profiler/build.gradle.kts | 5 +++++ sentry-graphql-22/build.gradle.kts | 5 +++++ sentry-graphql-core/build.gradle.kts | 5 +++++ sentry-graphql/build.gradle.kts | 5 +++++ sentry-jcache/build.gradle.kts | 5 +++++ sentry-jdbc/build.gradle.kts | 5 +++++ sentry-jul/build.gradle.kts | 5 +++++ sentry-kafka/build.gradle.kts | 5 +++++ sentry-kotlin-extensions/build.gradle.kts | 1 + sentry-ktor-client/build.gradle.kts | 1 + sentry-launchdarkly-server/build.gradle.kts | 5 +++++ sentry-log4j2/build.gradle.kts | 5 +++++ sentry-logback/build.gradle.kts | 5 +++++ sentry-okhttp/build.gradle.kts | 1 + sentry-openfeature/build.gradle.kts | 5 +++++ sentry-openfeign/build.gradle.kts | 5 +++++ .../sentry-opentelemetry-agent/build.gradle.kts | 4 ++++ .../sentry-opentelemetry-agentcustomization/build.gradle.kts | 5 +++++ .../sentry-opentelemetry-agentless-spring/build.gradle.kts | 4 ++++ .../sentry-opentelemetry-agentless/build.gradle.kts | 4 ++++ .../sentry-opentelemetry-bootstrap/build.gradle.kts | 5 +++++ .../sentry-opentelemetry-core/build.gradle.kts | 5 +++++ .../sentry-opentelemetry-otlp-spring/build.gradle.kts | 4 ++++ .../sentry-opentelemetry-otlp/build.gradle.kts | 5 +++++ sentry-quartz/build.gradle.kts | 5 +++++ sentry-servlet-jakarta/build.gradle.kts | 5 +++++ sentry-servlet/build.gradle.kts | 5 +++++ sentry-spotlight/build.gradle.kts | 1 + sentry-spring-boot-starter/build.gradle.kts | 4 ++++ sentry-spring-boot/build.gradle.kts | 5 +++++ sentry-spring/build.gradle.kts | 5 +++++ sentry/build.gradle.kts | 1 + 37 files changed, 144 insertions(+) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 1a145040e7c..64a4c50d3fc 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -11,6 +11,7 @@ coroutines = "1.6.1" espresso = "3.7.0" feign = "11.6" gummyBears = "0.12.0" +java18Signature = "1.0" jackson = "2.18.3" jetbrainsCompose = "1.6.11" kotlin = "2.2.0" diff --git a/sentry-apache-http-client-5/build.gradle.kts b/sentry-apache-http-client-5/build.gradle.kts index 00916258b8f..2c367be868c 100644 --- a/sentry-apache-http-client-5/build.gradle.kts +++ b/sentry-apache-http-client-5/build.gradle.kts @@ -3,6 +3,7 @@ import org.jetbrains.kotlin.gradle.tasks.KotlinCompile plugins { `java-library` + alias(libs.plugins.animalsniffer) id("io.sentry.javadoc") alias(libs.plugins.kotlin.jvm) alias(libs.plugins.errorprone) @@ -25,6 +26,8 @@ dependencies { errorprone(libs.nopen.checker) errorprone(libs.nullaway) + signature("org.codehaus.mojo.signature:java18:${libs.versions.java18Signature.get()}@signature") + // tests testImplementation(libs.apache.httpclient) testImplementation(projects.sentryTestSupport) @@ -33,6 +36,8 @@ dependencies { testImplementation(libs.mockito.kotlin) } +tasks { check { dependsOn(animalsnifferMain) } } + tasks.withType().configureEach { options.errorprone { check("NullAway", net.ltgt.gradle.errorprone.CheckSeverity.ERROR) diff --git a/sentry-apollo-3/build.gradle.kts b/sentry-apollo-3/build.gradle.kts index d70085e27bd..d3763d2d59b 100644 --- a/sentry-apollo-3/build.gradle.kts +++ b/sentry-apollo-3/build.gradle.kts @@ -40,6 +40,7 @@ dependencies { val gummyBearsModule = libs.gummy.bears.api21.get().module signature("${gummyBearsModule}:${libs.versions.gummyBears.get()}@signature") + signature("org.codehaus.mojo.signature:java18:${libs.versions.java18Signature.get()}@signature") } tasks { check { dependsOn(animalsnifferMain) } } diff --git a/sentry-apollo-4/build.gradle.kts b/sentry-apollo-4/build.gradle.kts index abb7ccb760e..8687fe5523b 100644 --- a/sentry-apollo-4/build.gradle.kts +++ b/sentry-apollo-4/build.gradle.kts @@ -42,6 +42,7 @@ dependencies { val gummyBearsModule = libs.gummy.bears.api21.get().module signature("${gummyBearsModule}:${libs.versions.gummyBears.get()}@signature") + signature("org.codehaus.mojo.signature:java18:${libs.versions.java18Signature.get()}@signature") } tasks { check { dependsOn(animalsnifferMain) } } diff --git a/sentry-apollo/build.gradle.kts b/sentry-apollo/build.gradle.kts index 0fc853886df..0805be42db4 100644 --- a/sentry-apollo/build.gradle.kts +++ b/sentry-apollo/build.gradle.kts @@ -41,6 +41,7 @@ dependencies { val gummyBearsModule = libs.gummy.bears.api21.get().module signature("${gummyBearsModule}:${libs.versions.gummyBears.get()}@signature") + signature("org.codehaus.mojo.signature:java18:${libs.versions.java18Signature.get()}@signature") } tasks { check { dependsOn(animalsnifferMain) } } diff --git a/sentry-async-profiler/build.gradle.kts b/sentry-async-profiler/build.gradle.kts index 17093fe6a09..77486828f90 100644 --- a/sentry-async-profiler/build.gradle.kts +++ b/sentry-async-profiler/build.gradle.kts @@ -8,6 +8,7 @@ plugins { alias(libs.plugins.errorprone) alias(libs.plugins.gradle.versions) alias(libs.plugins.buildconfig) + alias(libs.plugins.animalsniffer) } tasks.withType().configureEach { @@ -28,6 +29,8 @@ dependencies { errorprone(libs.nopen.checker) errorprone(libs.nullaway) + signature("org.codehaus.mojo.signature:java18:${libs.versions.java18Signature.get()}@signature") + // tests testImplementation(kotlin(Config.kotlinStdLib)) testImplementation(projects.sentryTestSupport) @@ -36,6 +39,8 @@ dependencies { testImplementation(libs.mockito.inline) } +tasks { check { dependsOn(animalsnifferMain) } } + tasks.withType().configureEach { options.errorprone { check("NullAway", net.ltgt.gradle.errorprone.CheckSeverity.ERROR) diff --git a/sentry-graphql-22/build.gradle.kts b/sentry-graphql-22/build.gradle.kts index 3c0667fd0d4..4dc3d73cd00 100644 --- a/sentry-graphql-22/build.gradle.kts +++ b/sentry-graphql-22/build.gradle.kts @@ -8,6 +8,7 @@ plugins { alias(libs.plugins.errorprone) alias(libs.plugins.gradle.versions) alias(libs.plugins.buildconfig) + alias(libs.plugins.animalsniffer) } tasks.withType().configureEach { @@ -27,6 +28,8 @@ dependencies { errorprone(libs.nopen.checker) errorprone(libs.nullaway) + signature("org.codehaus.mojo.signature:java18:${libs.versions.java18Signature.get()}@signature") + // tests testImplementation(projects.sentry) testImplementation(projects.sentryTestSupport) @@ -41,6 +44,8 @@ dependencies { testImplementation("com.netflix.graphql.dgs:graphql-error-types:4.9.2") } +tasks { check { dependsOn(animalsnifferMain) } } + tasks.withType().configureEach { options.errorprone { check("NullAway", net.ltgt.gradle.errorprone.CheckSeverity.ERROR) diff --git a/sentry-graphql-core/build.gradle.kts b/sentry-graphql-core/build.gradle.kts index 62635ded34e..277c15c7615 100644 --- a/sentry-graphql-core/build.gradle.kts +++ b/sentry-graphql-core/build.gradle.kts @@ -8,6 +8,7 @@ plugins { alias(libs.plugins.errorprone) alias(libs.plugins.gradle.versions) alias(libs.plugins.buildconfig) + alias(libs.plugins.animalsniffer) } tasks.withType().configureEach { @@ -26,6 +27,8 @@ dependencies { errorprone(libs.nopen.checker) errorprone(libs.nullaway) + signature("org.codehaus.mojo.signature:java18:${libs.versions.java18Signature.get()}@signature") + // tests testImplementation(projects.sentry) testImplementation(projects.sentryTestSupport) @@ -40,6 +43,8 @@ dependencies { testImplementation("com.netflix.graphql.dgs:graphql-error-types:4.9.2") } +tasks { check { dependsOn(animalsnifferMain) } } + tasks.withType().configureEach { options.errorprone { check("NullAway", net.ltgt.gradle.errorprone.CheckSeverity.ERROR) diff --git a/sentry-graphql/build.gradle.kts b/sentry-graphql/build.gradle.kts index 30000655079..a589e4fc4b0 100644 --- a/sentry-graphql/build.gradle.kts +++ b/sentry-graphql/build.gradle.kts @@ -8,6 +8,7 @@ plugins { alias(libs.plugins.errorprone) alias(libs.plugins.gradle.versions) alias(libs.plugins.buildconfig) + alias(libs.plugins.animalsniffer) } tasks.withType().configureEach { @@ -27,6 +28,8 @@ dependencies { errorprone(libs.nopen.checker) errorprone(libs.nullaway) + signature("org.codehaus.mojo.signature:java18:${libs.versions.java18Signature.get()}@signature") + // tests testImplementation(projects.sentry) testImplementation(projects.sentryTestSupport) @@ -41,6 +44,8 @@ dependencies { testImplementation("com.netflix.graphql.dgs:graphql-error-types:4.9.2") } +tasks { check { dependsOn(animalsnifferMain) } } + tasks.withType().configureEach { options.errorprone { check("NullAway", net.ltgt.gradle.errorprone.CheckSeverity.ERROR) diff --git a/sentry-jcache/build.gradle.kts b/sentry-jcache/build.gradle.kts index 1cc3b6e0e3d..db85b99012b 100644 --- a/sentry-jcache/build.gradle.kts +++ b/sentry-jcache/build.gradle.kts @@ -8,6 +8,7 @@ plugins { alias(libs.plugins.errorprone) alias(libs.plugins.gradle.versions) alias(libs.plugins.buildconfig) + alias(libs.plugins.animalsniffer) } tasks.withType().configureEach { @@ -26,6 +27,8 @@ dependencies { errorprone(libs.nopen.checker) errorprone(libs.nullaway) + signature("org.codehaus.mojo.signature:java18:${libs.versions.java18Signature.get()}@signature") + // tests testImplementation(projects.sentry) testImplementation(projects.sentryTestSupport) @@ -36,6 +39,8 @@ dependencies { testImplementation(libs.mockito.inline) } +tasks { check { dependsOn(animalsnifferMain) } } + tasks.withType().configureEach { options.errorprone { check("NullAway", net.ltgt.gradle.errorprone.CheckSeverity.ERROR) diff --git a/sentry-jdbc/build.gradle.kts b/sentry-jdbc/build.gradle.kts index 1e86048053e..179af2b7f32 100644 --- a/sentry-jdbc/build.gradle.kts +++ b/sentry-jdbc/build.gradle.kts @@ -8,6 +8,7 @@ plugins { alias(libs.plugins.errorprone) alias(libs.plugins.gradle.versions) alias(libs.plugins.buildconfig) + alias(libs.plugins.animalsniffer) } tasks.withType().configureEach { @@ -24,6 +25,8 @@ dependencies { errorprone(libs.nopen.checker) errorprone(libs.nullaway) + signature("org.codehaus.mojo.signature:java18:${libs.versions.java18Signature.get()}@signature") + // tests testImplementation(projects.sentryTestSupport) testImplementation(kotlin(Config.kotlinStdLib)) @@ -34,6 +37,8 @@ dependencies { testImplementation(libs.mockito.inline) } +tasks { check { dependsOn(animalsnifferMain) } } + tasks.withType().configureEach { options.errorprone { check("NullAway", net.ltgt.gradle.errorprone.CheckSeverity.ERROR) diff --git a/sentry-jul/build.gradle.kts b/sentry-jul/build.gradle.kts index 66c46bcee21..95513d35a85 100644 --- a/sentry-jul/build.gradle.kts +++ b/sentry-jul/build.gradle.kts @@ -8,6 +8,7 @@ plugins { alias(libs.plugins.errorprone) alias(libs.plugins.gradle.versions) alias(libs.plugins.buildconfig) + alias(libs.plugins.animalsniffer) } tasks.withType().configureEach { @@ -24,6 +25,8 @@ dependencies { errorprone(libs.nopen.checker) errorprone(libs.nullaway) + signature("org.codehaus.mojo.signature:java18:${libs.versions.java18Signature.get()}@signature") + // tests testImplementation(projects.sentryTestSupport) testImplementation(kotlin(Config.kotlinStdLib)) @@ -33,6 +36,8 @@ dependencies { testImplementation(libs.slf4j.api) } +tasks { check { dependsOn(animalsnifferMain) } } + tasks { test { // used to test io.sentry.jul.SentryHandler diff --git a/sentry-kafka/build.gradle.kts b/sentry-kafka/build.gradle.kts index ef1ff252468..631595ead29 100644 --- a/sentry-kafka/build.gradle.kts +++ b/sentry-kafka/build.gradle.kts @@ -8,6 +8,7 @@ plugins { alias(libs.plugins.errorprone) alias(libs.plugins.gradle.versions) alias(libs.plugins.buildconfig) + alias(libs.plugins.animalsniffer) } tasks.withType().configureEach { @@ -24,6 +25,8 @@ dependencies { errorprone(libs.nopen.checker) errorprone(libs.nullaway) + signature("org.codehaus.mojo.signature:java18:${libs.versions.java18Signature.get()}@signature") + // tests testImplementation(projects.sentryTestSupport) testImplementation(kotlin(Config.kotlinStdLib)) @@ -33,6 +36,8 @@ dependencies { testImplementation(libs.kafka.clients) } +tasks { check { dependsOn(animalsnifferMain) } } + tasks.withType().configureEach { options.errorprone { check("NullAway", net.ltgt.gradle.errorprone.CheckSeverity.ERROR) diff --git a/sentry-kotlin-extensions/build.gradle.kts b/sentry-kotlin-extensions/build.gradle.kts index 8c4312641a8..53f5ee5328e 100644 --- a/sentry-kotlin-extensions/build.gradle.kts +++ b/sentry-kotlin-extensions/build.gradle.kts @@ -35,6 +35,7 @@ dependencies { val gummyBearsModule = libs.gummy.bears.api21.get().module signature("${gummyBearsModule}:${libs.versions.gummyBears.get()}@signature") + signature("org.codehaus.mojo.signature:java18:${libs.versions.java18Signature.get()}@signature") } tasks { check { dependsOn(animalsnifferMain) } } diff --git a/sentry-ktor-client/build.gradle.kts b/sentry-ktor-client/build.gradle.kts index 647563cc1d1..4b8e176d5c6 100644 --- a/sentry-ktor-client/build.gradle.kts +++ b/sentry-ktor-client/build.gradle.kts @@ -42,6 +42,7 @@ dependencies { val gummyBearsModule = libs.gummy.bears.api21.get().module signature("${gummyBearsModule}:${libs.versions.gummyBears.get()}@signature") + signature("org.codehaus.mojo.signature:java18:${libs.versions.java18Signature.get()}@signature") } tasks { check { dependsOn(animalsnifferMain) } } diff --git a/sentry-launchdarkly-server/build.gradle.kts b/sentry-launchdarkly-server/build.gradle.kts index 370252c2154..00de8e61b6b 100644 --- a/sentry-launchdarkly-server/build.gradle.kts +++ b/sentry-launchdarkly-server/build.gradle.kts @@ -8,6 +8,7 @@ plugins { alias(libs.plugins.errorprone) alias(libs.plugins.gradle.versions) alias(libs.plugins.buildconfig) + alias(libs.plugins.animalsniffer) } tasks.withType().configureEach { @@ -27,6 +28,8 @@ dependencies { errorprone(libs.nopen.checker) errorprone(libs.nullaway) + signature("org.codehaus.mojo.signature:java18:${libs.versions.java18Signature.get()}@signature") + // tests testImplementation(projects.sentry) testImplementation(projects.sentryTestSupport) @@ -37,6 +40,8 @@ dependencies { testImplementation(libs.launchdarkly.server) } +tasks { check { dependsOn(animalsnifferMain) } } + tasks.withType().configureEach { options.errorprone { check("NullAway", net.ltgt.gradle.errorprone.CheckSeverity.ERROR) diff --git a/sentry-log4j2/build.gradle.kts b/sentry-log4j2/build.gradle.kts index 1c5cf94e8eb..226f0f7544d 100644 --- a/sentry-log4j2/build.gradle.kts +++ b/sentry-log4j2/build.gradle.kts @@ -8,6 +8,7 @@ plugins { alias(libs.plugins.errorprone) alias(libs.plugins.gradle.versions) alias(libs.plugins.buildconfig) + alias(libs.plugins.animalsniffer) } tasks.withType().configureEach { @@ -26,6 +27,8 @@ dependencies { errorprone(libs.nopen.checker) errorprone(libs.nullaway) + signature("org.codehaus.mojo.signature:java18:${libs.versions.java18Signature.get()}@signature") + // tests testImplementation(projects.sentryTestSupport) testImplementation(kotlin(Config.kotlinStdLib)) @@ -35,6 +38,8 @@ dependencies { testImplementation(libs.mockito.kotlin) } +tasks { check { dependsOn(animalsnifferMain) } } + buildConfig { useJavaOutput() packageName("io.sentry.log4j2") diff --git a/sentry-logback/build.gradle.kts b/sentry-logback/build.gradle.kts index 1c42a4e1c03..0b6be5753a4 100644 --- a/sentry-logback/build.gradle.kts +++ b/sentry-logback/build.gradle.kts @@ -8,6 +8,7 @@ plugins { alias(libs.plugins.errorprone) alias(libs.plugins.gradle.versions) alias(libs.plugins.buildconfig) + alias(libs.plugins.animalsniffer) } tasks.withType().configureEach { @@ -24,6 +25,8 @@ dependencies { errorprone(libs.nopen.checker) errorprone(libs.nullaway) + signature("org.codehaus.mojo.signature:java18:${libs.versions.java18Signature.get()}@signature") + // tests testImplementation(projects.sentryTestSupport) testImplementation(kotlin(Config.kotlinStdLib)) @@ -32,6 +35,8 @@ dependencies { testImplementation(libs.mockito.kotlin) } +tasks { check { dependsOn(animalsnifferMain) } } + buildConfig { useJavaOutput() packageName("io.sentry.logback") diff --git a/sentry-okhttp/build.gradle.kts b/sentry-okhttp/build.gradle.kts index d547720c174..eced752ed68 100644 --- a/sentry-okhttp/build.gradle.kts +++ b/sentry-okhttp/build.gradle.kts @@ -41,6 +41,7 @@ dependencies { val gummyBearsModule = libs.gummy.bears.api21.get().module signature("${gummyBearsModule}:${libs.versions.gummyBears.get()}@signature") + signature("org.codehaus.mojo.signature:java18:${libs.versions.java18Signature.get()}@signature") } tasks { check { dependsOn(animalsnifferMain) } } diff --git a/sentry-openfeature/build.gradle.kts b/sentry-openfeature/build.gradle.kts index fbabcb81aa5..fbb819ad57b 100644 --- a/sentry-openfeature/build.gradle.kts +++ b/sentry-openfeature/build.gradle.kts @@ -8,6 +8,7 @@ plugins { alias(libs.plugins.errorprone) alias(libs.plugins.gradle.versions) alias(libs.plugins.buildconfig) + alias(libs.plugins.animalsniffer) } tasks.withType().configureEach { @@ -27,6 +28,8 @@ dependencies { errorprone(libs.nopen.checker) errorprone(libs.nullaway) + signature("org.codehaus.mojo.signature:java18:${libs.versions.java18Signature.get()}@signature") + // tests testImplementation(projects.sentry) testImplementation(projects.sentryTestSupport) @@ -37,6 +40,8 @@ dependencies { testImplementation(libs.openfeature) } +tasks { check { dependsOn(animalsnifferMain) } } + tasks.withType().configureEach { options.errorprone { check("NullAway", net.ltgt.gradle.errorprone.CheckSeverity.ERROR) diff --git a/sentry-openfeign/build.gradle.kts b/sentry-openfeign/build.gradle.kts index 9b1ac2bbc29..56205bf1eea 100644 --- a/sentry-openfeign/build.gradle.kts +++ b/sentry-openfeign/build.gradle.kts @@ -8,6 +8,7 @@ plugins { alias(libs.plugins.errorprone) alias(libs.plugins.gradle.versions) alias(libs.plugins.buildconfig) + alias(libs.plugins.animalsniffer) } tasks.withType().configureEach { @@ -24,6 +25,8 @@ dependencies { errorprone(libs.nopen.checker) errorprone(libs.nullaway) + signature("org.codehaus.mojo.signature:java18:${libs.versions.java18Signature.get()}@signature") + // tests testImplementation(projects.sentryTestSupport) testImplementation(kotlin(Config.kotlinStdLib)) @@ -34,6 +37,8 @@ dependencies { testImplementation(libs.okhttp.mockwebserver) } +tasks { check { dependsOn(animalsnifferMain) } } + tasks.withType().configureEach { options.errorprone { check("NullAway", net.ltgt.gradle.errorprone.CheckSeverity.ERROR) diff --git a/sentry-opentelemetry/sentry-opentelemetry-agent/build.gradle.kts b/sentry-opentelemetry/sentry-opentelemetry-agent/build.gradle.kts index ef98d488bd1..7720fabec7f 100644 --- a/sentry-opentelemetry/sentry-opentelemetry-agent/build.gradle.kts +++ b/sentry-opentelemetry/sentry-opentelemetry-agent/build.gradle.kts @@ -2,6 +2,7 @@ import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar plugins { `java-library` + alias(libs.plugins.animalsniffer) id("io.sentry.javadoc") alias(libs.plugins.shadow) } @@ -75,8 +76,11 @@ dependencies { bootstrapLibs(projects.sentryOpentelemetry.sentryOpentelemetryBootstrap) javaagentLibs(projects.sentryOpentelemetry.sentryOpentelemetryAgentcustomization) upstreamAgent(libs.otel.javaagent) + signature("org.codehaus.mojo.signature:java18:${libs.versions.java18Signature.get()}@signature") } +tasks { check { dependsOn(animalsnifferMain) } } + fun isolateClasses(jars: Iterable): CopySpec = copySpec { jars.forEach { from(zipTree(it)) { diff --git a/sentry-opentelemetry/sentry-opentelemetry-agentcustomization/build.gradle.kts b/sentry-opentelemetry/sentry-opentelemetry-agentcustomization/build.gradle.kts index 71f31ce2afb..56a1a26dead 100644 --- a/sentry-opentelemetry/sentry-opentelemetry-agentcustomization/build.gradle.kts +++ b/sentry-opentelemetry/sentry-opentelemetry-agentcustomization/build.gradle.kts @@ -3,6 +3,7 @@ import org.jetbrains.kotlin.gradle.tasks.KotlinCompile plugins { `java-library` + alias(libs.plugins.animalsniffer) id("io.sentry.javadoc") alias(libs.plugins.kotlin.jvm) alias(libs.plugins.errorprone) @@ -32,6 +33,8 @@ dependencies { errorprone(libs.nopen.checker) errorprone(libs.nullaway) + signature("org.codehaus.mojo.signature:java18:${libs.versions.java18Signature.get()}@signature") + // tests testImplementation(projects.sentryTestSupport) testImplementation(kotlin(Config.kotlinStdLib)) @@ -40,6 +43,8 @@ dependencies { testImplementation(libs.mockito.kotlin) } +tasks { check { dependsOn(animalsnifferMain) } } + tasks.withType().configureEach { options.errorprone { check("NullAway", net.ltgt.gradle.errorprone.CheckSeverity.ERROR) diff --git a/sentry-opentelemetry/sentry-opentelemetry-agentless-spring/build.gradle.kts b/sentry-opentelemetry/sentry-opentelemetry-agentless-spring/build.gradle.kts index c02ca0ca468..16d6d2f6145 100644 --- a/sentry-opentelemetry/sentry-opentelemetry-agentless-spring/build.gradle.kts +++ b/sentry-opentelemetry/sentry-opentelemetry-agentless-spring/build.gradle.kts @@ -2,6 +2,7 @@ plugins { `java-library` id("io.sentry.javadoc") alias(libs.plugins.buildconfig) + alias(libs.plugins.animalsniffer) } dependencies { @@ -14,8 +15,11 @@ dependencies { api(libs.otel.semconv.incubating) api(libs.otel.extension.autoconfigure) api(libs.springboot3.otel) + signature("org.codehaus.mojo.signature:java18:${libs.versions.java18Signature.get()}@signature") } +tasks { check { dependsOn(animalsnifferMain) } } + buildConfig { useJavaOutput() packageName("io.sentry.opentelemetry.agentless.spring") diff --git a/sentry-opentelemetry/sentry-opentelemetry-agentless/build.gradle.kts b/sentry-opentelemetry/sentry-opentelemetry-agentless/build.gradle.kts index 43e87d53beb..148877d48bf 100644 --- a/sentry-opentelemetry/sentry-opentelemetry-agentless/build.gradle.kts +++ b/sentry-opentelemetry/sentry-opentelemetry-agentless/build.gradle.kts @@ -2,6 +2,7 @@ plugins { `java-library` id("io.sentry.javadoc") alias(libs.plugins.buildconfig) + alias(libs.plugins.animalsniffer) } dependencies { @@ -12,8 +13,11 @@ dependencies { api(libs.otel.semconv) api(libs.otel.semconv.incubating) api(libs.otel.extension.autoconfigure) + signature("org.codehaus.mojo.signature:java18:${libs.versions.java18Signature.get()}@signature") } +tasks { check { dependsOn(animalsnifferMain) } } + buildConfig { useJavaOutput() packageName("io.sentry.opentelemetry.agentless") diff --git a/sentry-opentelemetry/sentry-opentelemetry-bootstrap/build.gradle.kts b/sentry-opentelemetry/sentry-opentelemetry-bootstrap/build.gradle.kts index d4bd1af9ede..7df51873131 100644 --- a/sentry-opentelemetry/sentry-opentelemetry-bootstrap/build.gradle.kts +++ b/sentry-opentelemetry/sentry-opentelemetry-bootstrap/build.gradle.kts @@ -3,6 +3,7 @@ import org.jetbrains.kotlin.gradle.tasks.KotlinCompile plugins { `java-library` + alias(libs.plugins.animalsniffer) id("io.sentry.javadoc") alias(libs.plugins.kotlin.jvm) alias(libs.plugins.errorprone) @@ -23,6 +24,8 @@ dependencies { errorprone(libs.nopen.checker) errorprone(libs.nullaway) + signature("org.codehaus.mojo.signature:java18:${libs.versions.java18Signature.get()}@signature") + // tests testImplementation(projects.sentryTestSupport) testImplementation(kotlin(Config.kotlinStdLib)) @@ -35,6 +38,8 @@ dependencies { testImplementation(libs.otel.semconv.incubating) } +tasks { check { dependsOn(animalsnifferMain) } } + tasks.withType().configureEach { options.errorprone { check("NullAway", net.ltgt.gradle.errorprone.CheckSeverity.ERROR) diff --git a/sentry-opentelemetry/sentry-opentelemetry-core/build.gradle.kts b/sentry-opentelemetry/sentry-opentelemetry-core/build.gradle.kts index 91ec023e178..53010735c62 100644 --- a/sentry-opentelemetry/sentry-opentelemetry-core/build.gradle.kts +++ b/sentry-opentelemetry/sentry-opentelemetry-core/build.gradle.kts @@ -3,6 +3,7 @@ import org.jetbrains.kotlin.gradle.tasks.KotlinCompile plugins { `java-library` + alias(libs.plugins.animalsniffer) id("io.sentry.javadoc") alias(libs.plugins.kotlin.jvm) alias(libs.plugins.errorprone) @@ -32,6 +33,8 @@ dependencies { errorprone(libs.nopen.checker) errorprone(libs.nullaway) + signature("org.codehaus.mojo.signature:java18:${libs.versions.java18Signature.get()}@signature") + // tests testImplementation(projects.sentryOpentelemetry.sentryOpentelemetryBootstrap) testImplementation(projects.sentryTestSupport) @@ -45,6 +48,8 @@ dependencies { testImplementation(libs.otel.semconv.incubating) } +tasks { check { dependsOn(animalsnifferMain) } } + tasks.withType().configureEach { options.errorprone { check("NullAway", net.ltgt.gradle.errorprone.CheckSeverity.ERROR) diff --git a/sentry-opentelemetry/sentry-opentelemetry-otlp-spring/build.gradle.kts b/sentry-opentelemetry/sentry-opentelemetry-otlp-spring/build.gradle.kts index 1ff16cd0a31..9d3f1d1646a 100644 --- a/sentry-opentelemetry/sentry-opentelemetry-otlp-spring/build.gradle.kts +++ b/sentry-opentelemetry/sentry-opentelemetry-otlp-spring/build.gradle.kts @@ -1,13 +1,17 @@ plugins { `java-library` + alias(libs.plugins.animalsniffer) id("io.sentry.javadoc") } dependencies { api(projects.sentryOpentelemetry.sentryOpentelemetryOtlp) implementation(libs.springboot3.otel) + signature("org.codehaus.mojo.signature:java18:${libs.versions.java18Signature.get()}@signature") } +tasks { check { dependsOn(animalsnifferMain) } } + tasks.jar { manifest { attributes( diff --git a/sentry-opentelemetry/sentry-opentelemetry-otlp/build.gradle.kts b/sentry-opentelemetry/sentry-opentelemetry-otlp/build.gradle.kts index d63c8a5c451..1d81d2dc7c6 100644 --- a/sentry-opentelemetry/sentry-opentelemetry-otlp/build.gradle.kts +++ b/sentry-opentelemetry/sentry-opentelemetry-otlp/build.gradle.kts @@ -3,6 +3,7 @@ import org.jetbrains.kotlin.gradle.tasks.KotlinCompile plugins { `java-library` + alias(libs.plugins.animalsniffer) id("io.sentry.javadoc") alias(libs.plugins.kotlin.jvm) alias(libs.plugins.errorprone) @@ -29,6 +30,8 @@ dependencies { errorprone(libs.nopen.checker) errorprone(libs.nullaway) + signature("org.codehaus.mojo.signature:java18:${libs.versions.java18Signature.get()}@signature") + // tests testImplementation(projects.sentryTestSupport) testImplementation(kotlin(Config.kotlinStdLib)) @@ -41,6 +44,8 @@ dependencies { // testImplementation(libs.otel.semconv.incubating) } +tasks { check { dependsOn(animalsnifferMain) } } + tasks.withType().configureEach { options.errorprone { check("NullAway", net.ltgt.gradle.errorprone.CheckSeverity.ERROR) diff --git a/sentry-quartz/build.gradle.kts b/sentry-quartz/build.gradle.kts index 6e227abafe6..53fe454f82a 100644 --- a/sentry-quartz/build.gradle.kts +++ b/sentry-quartz/build.gradle.kts @@ -8,6 +8,7 @@ plugins { alias(libs.plugins.errorprone) alias(libs.plugins.gradle.versions) alias(libs.plugins.buildconfig) + alias(libs.plugins.animalsniffer) } tasks.withType().configureEach { @@ -26,6 +27,8 @@ dependencies { errorprone(libs.nopen.checker) errorprone(libs.nullaway) + signature("org.codehaus.mojo.signature:java18:${libs.versions.java18Signature.get()}@signature") + // tests testImplementation(projects.sentry) testImplementation(projects.sentryTestSupport) @@ -35,6 +38,8 @@ dependencies { testImplementation(libs.mockito.inline) } +tasks { check { dependsOn(animalsnifferMain) } } + tasks.withType().configureEach { options.errorprone { check("NullAway", net.ltgt.gradle.errorprone.CheckSeverity.ERROR) diff --git a/sentry-servlet-jakarta/build.gradle.kts b/sentry-servlet-jakarta/build.gradle.kts index 3cdc4772f18..15c4a9069ca 100644 --- a/sentry-servlet-jakarta/build.gradle.kts +++ b/sentry-servlet-jakarta/build.gradle.kts @@ -8,6 +8,7 @@ plugins { alias(libs.plugins.errorprone) alias(libs.plugins.gradle.versions) alias(libs.plugins.buildconfig) + alias(libs.plugins.animalsniffer) } tasks.withType().configureEach { @@ -26,6 +27,8 @@ dependencies { errorprone(libs.nopen.checker) errorprone(libs.nullaway) + signature("org.codehaus.mojo.signature:java18:${libs.versions.java18Signature.get()}@signature") + // tests testImplementation(projects.sentryTestSupport) testImplementation(kotlin(Config.kotlinStdLib)) @@ -35,6 +38,8 @@ dependencies { testImplementation(libs.servlet.jakarta.api) } +tasks { check { dependsOn(animalsnifferMain) } } + tasks.withType().configureEach { options.errorprone { check("NullAway", net.ltgt.gradle.errorprone.CheckSeverity.ERROR) diff --git a/sentry-servlet/build.gradle.kts b/sentry-servlet/build.gradle.kts index 9f12d4ee177..db5298275fa 100644 --- a/sentry-servlet/build.gradle.kts +++ b/sentry-servlet/build.gradle.kts @@ -8,6 +8,7 @@ plugins { alias(libs.plugins.errorprone) alias(libs.plugins.gradle.versions) alias(libs.plugins.buildconfig) + alias(libs.plugins.animalsniffer) } tasks.withType().configureEach { @@ -26,6 +27,8 @@ dependencies { errorprone(libs.nopen.checker) errorprone(libs.nullaway) + signature("org.codehaus.mojo.signature:java18:${libs.versions.java18Signature.get()}@signature") + // tests testImplementation(projects.sentryTestSupport) testImplementation(kotlin(Config.kotlinStdLib)) @@ -36,6 +39,8 @@ dependencies { testImplementation(libs.springboot.starter.web) } +tasks { check { dependsOn(animalsnifferMain) } } + tasks.withType().configureEach { options.errorprone { check("NullAway", net.ltgt.gradle.errorprone.CheckSeverity.ERROR) diff --git a/sentry-spotlight/build.gradle.kts b/sentry-spotlight/build.gradle.kts index 71498aecd92..f4beef73ffb 100644 --- a/sentry-spotlight/build.gradle.kts +++ b/sentry-spotlight/build.gradle.kts @@ -33,6 +33,7 @@ dependencies { val gummyBearsModule = libs.gummy.bears.api21.get().module signature("${gummyBearsModule}:${libs.versions.gummyBears.get()}@signature") + signature("org.codehaus.mojo.signature:java18:${libs.versions.java18Signature.get()}@signature") } tasks { check { dependsOn(animalsnifferMain) } } diff --git a/sentry-spring-boot-starter/build.gradle.kts b/sentry-spring-boot-starter/build.gradle.kts index f4da56179cb..d814c38d35b 100644 --- a/sentry-spring-boot-starter/build.gradle.kts +++ b/sentry-spring-boot-starter/build.gradle.kts @@ -3,6 +3,7 @@ import org.jetbrains.kotlin.gradle.tasks.KotlinCompile plugins { `java-library` + alias(libs.plugins.animalsniffer) id("io.sentry.javadoc") alias(libs.plugins.kotlin.jvm) alias(libs.plugins.errorprone) @@ -28,8 +29,11 @@ dependencies { errorprone(libs.errorprone.core) errorprone(libs.nopen.checker) errorprone(libs.nullaway) + signature("org.codehaus.mojo.signature:java18:${libs.versions.java18Signature.get()}@signature") } +tasks { check { dependsOn(animalsnifferMain) } } + tasks.withType().configureEach { options.errorprone { check("NullAway", net.ltgt.gradle.errorprone.CheckSeverity.ERROR) diff --git a/sentry-spring-boot/build.gradle.kts b/sentry-spring-boot/build.gradle.kts index 3ed6199fbc5..87e957f8409 100644 --- a/sentry-spring-boot/build.gradle.kts +++ b/sentry-spring-boot/build.gradle.kts @@ -9,6 +9,7 @@ plugins { alias(libs.plugins.errorprone) alias(libs.plugins.gradle.versions) alias(libs.plugins.buildconfig) + alias(libs.plugins.animalsniffer) } tasks.withType().configureEach { @@ -55,6 +56,8 @@ dependencies { errorprone(libs.nopen.checker) errorprone(libs.nullaway) + signature("org.codehaus.mojo.signature:java18:${libs.versions.java18Signature.get()}@signature") + // tests testImplementation(projects.sentryLogback) testImplementation(projects.sentryQuartz) @@ -84,6 +87,8 @@ dependencies { testImplementation(projects.sentryAsyncProfiler) } +tasks { check { dependsOn(animalsnifferMain) } } + buildConfig { useJavaOutput() packageName("io.sentry.spring.boot") diff --git a/sentry-spring/build.gradle.kts b/sentry-spring/build.gradle.kts index fced2220f02..409d96e7f30 100644 --- a/sentry-spring/build.gradle.kts +++ b/sentry-spring/build.gradle.kts @@ -9,6 +9,7 @@ plugins { alias(libs.plugins.errorprone) alias(libs.plugins.gradle.versions) alias(libs.plugins.buildconfig) + alias(libs.plugins.animalsniffer) } tasks.withType().configureEach { @@ -44,6 +45,8 @@ dependencies { errorprone(libs.nopen.checker) errorprone(libs.nullaway) + signature("org.codehaus.mojo.signature:java18:${libs.versions.java18Signature.get()}@signature") + // tests testImplementation(projects.sentryTestSupport) testImplementation(projects.sentryGraphql) @@ -63,6 +66,8 @@ dependencies { testImplementation(libs.springboot.starter.webflux) } +tasks { check { dependsOn(animalsnifferMain) } } + buildConfig { useJavaOutput() packageName("io.sentry.spring") diff --git a/sentry/build.gradle.kts b/sentry/build.gradle.kts index 9717cb176ae..896a2e954c9 100644 --- a/sentry/build.gradle.kts +++ b/sentry/build.gradle.kts @@ -35,6 +35,7 @@ dependencies { val gummyBearsModule = libs.gummy.bears.api21.get().module signature("${gummyBearsModule}:${libs.versions.gummyBears.get()}@signature") + signature("org.codehaus.mojo.signature:java18:${libs.versions.java18Signature.get()}@signature") } animalsniffer { From 5b45502b8a1aaf754ea03bd4c72b38c26d3c35ae Mon Sep 17 00:00:00 2001 From: Alexander Dinauer Date: Thu, 9 Jul 2026 09:58:44 +0200 Subject: [PATCH 2/6] build: Extract Animal Sniffer convention plugins Move shared Java 8 API compatibility configuration into build-logic plugins. Apply the Android-compatible variant where modules also need gummy-bears API checks to reduce duplicated signature setup. Co-Authored-By: Claude --- build-logic/build.gradle.kts | 14 +++++ .../gradle/SentryAnimalSnifferPlugin.kt | 61 +++++++++++++++++++ gradle/libs.versions.toml | 4 +- sentry-apache-http-client-5/build.gradle.kts | 6 +- sentry-apollo-3/build.gradle.kts | 8 +-- sentry-apollo-4/build.gradle.kts | 8 +-- sentry-apollo/build.gradle.kts | 8 +-- sentry-async-profiler/build.gradle.kts | 6 +- sentry-graphql-22/build.gradle.kts | 6 +- sentry-graphql-core/build.gradle.kts | 6 +- sentry-graphql/build.gradle.kts | 6 +- sentry-jcache/build.gradle.kts | 6 +- sentry-jdbc/build.gradle.kts | 6 +- sentry-jul/build.gradle.kts | 6 +- sentry-kafka/build.gradle.kts | 6 +- sentry-kotlin-extensions/build.gradle.kts | 8 +-- sentry-ktor-client/build.gradle.kts | 8 +-- sentry-launchdarkly-server/build.gradle.kts | 6 +- sentry-log4j2/build.gradle.kts | 6 +- sentry-logback/build.gradle.kts | 6 +- sentry-okhttp/build.gradle.kts | 8 +-- sentry-openfeature/build.gradle.kts | 6 +- sentry-openfeign/build.gradle.kts | 6 +- .../build.gradle.kts | 5 +- .../build.gradle.kts | 6 +- .../build.gradle.kts | 5 +- .../build.gradle.kts | 5 +- .../build.gradle.kts | 6 +- .../build.gradle.kts | 6 +- .../build.gradle.kts | 5 +- .../build.gradle.kts | 6 +- sentry-quartz/build.gradle.kts | 6 +- sentry-servlet-jakarta/build.gradle.kts | 6 +- sentry-servlet/build.gradle.kts | 6 +- sentry-spotlight/build.gradle.kts | 8 +-- sentry-spring-boot-starter/build.gradle.kts | 5 +- sentry-spring-boot/build.gradle.kts | 6 +- sentry-spring/build.gradle.kts | 6 +- sentry/build.gradle.kts | 21 ++----- 39 files changed, 118 insertions(+), 201 deletions(-) create mode 100644 build-logic/src/main/kotlin/io/sentry/gradle/SentryAnimalSnifferPlugin.kt diff --git a/build-logic/build.gradle.kts b/build-logic/build.gradle.kts index 8abe9f55283..bba758f9b79 100644 --- a/build-logic/build.gradle.kts +++ b/build-logic/build.gradle.kts @@ -7,5 +7,19 @@ repositories { } dependencies { + implementation(libs.animalsniffer.gradle.plugin) implementation(libs.spotlessLib) } + +gradlePlugin { + plugins { + register("sentryAnimalSniffer") { + id = "io.sentry.animalsniffer" + implementationClass = "io.sentry.gradle.SentryAnimalSnifferPlugin" + } + register("sentryAnimalSnifferAndroid") { + id = "io.sentry.animalsniffer.android" + implementationClass = "io.sentry.gradle.SentryAnimalSnifferAndroidPlugin" + } + } +} diff --git a/build-logic/src/main/kotlin/io/sentry/gradle/SentryAnimalSnifferPlugin.kt b/build-logic/src/main/kotlin/io/sentry/gradle/SentryAnimalSnifferPlugin.kt new file mode 100644 index 00000000000..03463470a71 --- /dev/null +++ b/build-logic/src/main/kotlin/io/sentry/gradle/SentryAnimalSnifferPlugin.kt @@ -0,0 +1,61 @@ +package io.sentry.gradle + +import javax.inject.Inject +import org.gradle.api.Plugin +import org.gradle.api.Project +import org.gradle.api.artifacts.VersionCatalogsExtension +import org.gradle.api.model.ObjectFactory +import org.gradle.api.provider.ListProperty +import org.gradle.api.tasks.SourceTask + +abstract class SentryAnimalSnifferExtension @Inject constructor(objects: ObjectFactory) { + val ignoredClasses: ListProperty = objects.listProperty(String::class.java) + val mainExcludes: ListProperty = objects.listProperty(String::class.java) +} + +class SentryAnimalSnifferPlugin : Plugin { + override fun apply(project: Project) { + project.pluginManager.apply("ru.vyarus.animalsniffer") + + val libs = project.extensions.getByType(VersionCatalogsExtension::class.java).named("libs") + val extension = + project.extensions.create( + "sentryAnimalSniffer", + SentryAnimalSnifferExtension::class.java, + ) + + val java18Version = libs.findVersion("java18Signature").get().requiredVersion + project.dependencies.add( + "signature", + "org.codehaus.mojo.signature:java18:$java18Version@signature", + ) + + project.tasks.matching { it.name == "check" }.configureEach { + dependsOn("animalsnifferMain") + } + + project.afterEvaluate { + project.tasks.named("animalsnifferMain", SourceTask::class.java).configure { + exclude(extension.mainExcludes.get()) + val ignoredClasses = extension.ignoredClasses.get() + if (ignoredClasses.isNotEmpty()) { + javaClass.getMethod("setIgnoreClasses", Iterable::class.java).invoke(this, ignoredClasses) + } + } + } + } +} + +class SentryAnimalSnifferAndroidPlugin : Plugin { + override fun apply(project: Project) { + project.pluginManager.apply(SentryAnimalSnifferPlugin::class.java) + + val libs = project.extensions.getByType(VersionCatalogsExtension::class.java).named("libs") + val gummyBears = libs.findLibrary("gummy-bears-api21").get().get() + val gummyBearsVersion = libs.findVersion("gummyBears").get().requiredVersion + project.dependencies.add( + "signature", + "${gummyBears.module.group}:${gummyBears.module.name}:$gummyBearsVersion@signature", + ) + } +} diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 64a4c50d3fc..598a700f28e 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -1,4 +1,5 @@ [versions] +animalsniffer = "2.0.1" apollo = "2.5.9" androidxLifecycle = "2.2.0" androidxNavigation = "2.4.2" @@ -73,11 +74,12 @@ springboot4 = { id = "org.springframework.boot", version.ref = "springboot4" } spring-dependency-management = { id = "io.spring.dependency-management", version = "1.1.7" } sqldelight = { id = "app.cash.sqldelight", version.ref = "sqldelight" } gretty = { id = "org.gretty", version = "4.0.0" } -animalsniffer = { id = "ru.vyarus.animalsniffer", version = "2.0.1" } +animalsniffer = { id = "ru.vyarus.animalsniffer", version.ref = "animalsniffer" } sentry = { id = "io.sentry.android.gradle", version.ref = "sagp"} shadow = { id = "com.gradleup.shadow", version = "9.4.1" } [libraries] +animalsniffer-gradle-plugin = { module = "ru.vyarus:gradle-animalsniffer-plugin", version.ref = "animalsniffer" } apache-httpclient = { module = "org.apache.httpcomponents.client5:httpclient5", version = "5.0.4" } apollo2-coroutines = { module = "com.apollographql.apollo:apollo-coroutines-support", version.ref = "apollo" } apollo2-runtime = { module = "com.apollographql.apollo:apollo-runtime", version.ref = "apollo" } diff --git a/sentry-apache-http-client-5/build.gradle.kts b/sentry-apache-http-client-5/build.gradle.kts index 2c367be868c..984974bae9a 100644 --- a/sentry-apache-http-client-5/build.gradle.kts +++ b/sentry-apache-http-client-5/build.gradle.kts @@ -3,7 +3,7 @@ import org.jetbrains.kotlin.gradle.tasks.KotlinCompile plugins { `java-library` - alias(libs.plugins.animalsniffer) + id("io.sentry.animalsniffer") id("io.sentry.javadoc") alias(libs.plugins.kotlin.jvm) alias(libs.plugins.errorprone) @@ -26,8 +26,6 @@ dependencies { errorprone(libs.nopen.checker) errorprone(libs.nullaway) - signature("org.codehaus.mojo.signature:java18:${libs.versions.java18Signature.get()}@signature") - // tests testImplementation(libs.apache.httpclient) testImplementation(projects.sentryTestSupport) @@ -36,8 +34,6 @@ dependencies { testImplementation(libs.mockito.kotlin) } -tasks { check { dependsOn(animalsnifferMain) } } - tasks.withType().configureEach { options.errorprone { check("NullAway", net.ltgt.gradle.errorprone.CheckSeverity.ERROR) diff --git a/sentry-apollo-3/build.gradle.kts b/sentry-apollo-3/build.gradle.kts index d3763d2d59b..70f43d946ef 100644 --- a/sentry-apollo-3/build.gradle.kts +++ b/sentry-apollo-3/build.gradle.kts @@ -8,7 +8,7 @@ plugins { alias(libs.plugins.errorprone) alias(libs.plugins.gradle.versions) alias(libs.plugins.buildconfig) - alias(libs.plugins.animalsniffer) + id("io.sentry.animalsniffer.android") } tasks.withType().configureEach { @@ -37,14 +37,8 @@ dependencies { testImplementation(libs.mockito.kotlin) testImplementation(libs.mockito.inline) testImplementation(libs.okhttp.mockwebserver) - - val gummyBearsModule = libs.gummy.bears.api21.get().module - signature("${gummyBearsModule}:${libs.versions.gummyBears.get()}@signature") - signature("org.codehaus.mojo.signature:java18:${libs.versions.java18Signature.get()}@signature") } -tasks { check { dependsOn(animalsnifferMain) } } - tasks.withType().configureEach { options.errorprone { check("NullAway", net.ltgt.gradle.errorprone.CheckSeverity.ERROR) diff --git a/sentry-apollo-4/build.gradle.kts b/sentry-apollo-4/build.gradle.kts index 8687fe5523b..4f1276f0bf4 100644 --- a/sentry-apollo-4/build.gradle.kts +++ b/sentry-apollo-4/build.gradle.kts @@ -8,7 +8,7 @@ plugins { alias(libs.plugins.errorprone) alias(libs.plugins.gradle.versions) alias(libs.plugins.buildconfig) - alias(libs.plugins.animalsniffer) + id("io.sentry.animalsniffer.android") } tasks.withType().configureEach { @@ -39,14 +39,8 @@ dependencies { testImplementation(libs.mockito.inline) testImplementation(libs.okhttp.mockwebserver) testImplementation("org.jetbrains.kotlin:kotlin-reflect:2.0.0") - - val gummyBearsModule = libs.gummy.bears.api21.get().module - signature("${gummyBearsModule}:${libs.versions.gummyBears.get()}@signature") - signature("org.codehaus.mojo.signature:java18:${libs.versions.java18Signature.get()}@signature") } -tasks { check { dependsOn(animalsnifferMain) } } - tasks.withType().configureEach { options.errorprone { check("NullAway", net.ltgt.gradle.errorprone.CheckSeverity.ERROR) diff --git a/sentry-apollo/build.gradle.kts b/sentry-apollo/build.gradle.kts index 0805be42db4..2da8d8b20c1 100644 --- a/sentry-apollo/build.gradle.kts +++ b/sentry-apollo/build.gradle.kts @@ -8,7 +8,7 @@ plugins { alias(libs.plugins.errorprone) alias(libs.plugins.gradle.versions) alias(libs.plugins.buildconfig) - alias(libs.plugins.animalsniffer) + id("io.sentry.animalsniffer.android") } tasks.withType().configureEach { @@ -38,14 +38,8 @@ dependencies { testImplementation(libs.mockito.kotlin) testImplementation(libs.mockito.inline) testImplementation(libs.okhttp.mockwebserver) - - val gummyBearsModule = libs.gummy.bears.api21.get().module - signature("${gummyBearsModule}:${libs.versions.gummyBears.get()}@signature") - signature("org.codehaus.mojo.signature:java18:${libs.versions.java18Signature.get()}@signature") } -tasks { check { dependsOn(animalsnifferMain) } } - tasks.withType().configureEach { options.errorprone { check("NullAway", net.ltgt.gradle.errorprone.CheckSeverity.ERROR) diff --git a/sentry-async-profiler/build.gradle.kts b/sentry-async-profiler/build.gradle.kts index 77486828f90..17454baa662 100644 --- a/sentry-async-profiler/build.gradle.kts +++ b/sentry-async-profiler/build.gradle.kts @@ -8,7 +8,7 @@ plugins { alias(libs.plugins.errorprone) alias(libs.plugins.gradle.versions) alias(libs.plugins.buildconfig) - alias(libs.plugins.animalsniffer) + id("io.sentry.animalsniffer") } tasks.withType().configureEach { @@ -29,8 +29,6 @@ dependencies { errorprone(libs.nopen.checker) errorprone(libs.nullaway) - signature("org.codehaus.mojo.signature:java18:${libs.versions.java18Signature.get()}@signature") - // tests testImplementation(kotlin(Config.kotlinStdLib)) testImplementation(projects.sentryTestSupport) @@ -39,8 +37,6 @@ dependencies { testImplementation(libs.mockito.inline) } -tasks { check { dependsOn(animalsnifferMain) } } - tasks.withType().configureEach { options.errorprone { check("NullAway", net.ltgt.gradle.errorprone.CheckSeverity.ERROR) diff --git a/sentry-graphql-22/build.gradle.kts b/sentry-graphql-22/build.gradle.kts index 4dc3d73cd00..32db28fae8f 100644 --- a/sentry-graphql-22/build.gradle.kts +++ b/sentry-graphql-22/build.gradle.kts @@ -8,7 +8,7 @@ plugins { alias(libs.plugins.errorprone) alias(libs.plugins.gradle.versions) alias(libs.plugins.buildconfig) - alias(libs.plugins.animalsniffer) + id("io.sentry.animalsniffer") } tasks.withType().configureEach { @@ -28,8 +28,6 @@ dependencies { errorprone(libs.nopen.checker) errorprone(libs.nullaway) - signature("org.codehaus.mojo.signature:java18:${libs.versions.java18Signature.get()}@signature") - // tests testImplementation(projects.sentry) testImplementation(projects.sentryTestSupport) @@ -44,8 +42,6 @@ dependencies { testImplementation("com.netflix.graphql.dgs:graphql-error-types:4.9.2") } -tasks { check { dependsOn(animalsnifferMain) } } - tasks.withType().configureEach { options.errorprone { check("NullAway", net.ltgt.gradle.errorprone.CheckSeverity.ERROR) diff --git a/sentry-graphql-core/build.gradle.kts b/sentry-graphql-core/build.gradle.kts index 277c15c7615..34f71ab9cfb 100644 --- a/sentry-graphql-core/build.gradle.kts +++ b/sentry-graphql-core/build.gradle.kts @@ -8,7 +8,7 @@ plugins { alias(libs.plugins.errorprone) alias(libs.plugins.gradle.versions) alias(libs.plugins.buildconfig) - alias(libs.plugins.animalsniffer) + id("io.sentry.animalsniffer") } tasks.withType().configureEach { @@ -27,8 +27,6 @@ dependencies { errorprone(libs.nopen.checker) errorprone(libs.nullaway) - signature("org.codehaus.mojo.signature:java18:${libs.versions.java18Signature.get()}@signature") - // tests testImplementation(projects.sentry) testImplementation(projects.sentryTestSupport) @@ -43,8 +41,6 @@ dependencies { testImplementation("com.netflix.graphql.dgs:graphql-error-types:4.9.2") } -tasks { check { dependsOn(animalsnifferMain) } } - tasks.withType().configureEach { options.errorprone { check("NullAway", net.ltgt.gradle.errorprone.CheckSeverity.ERROR) diff --git a/sentry-graphql/build.gradle.kts b/sentry-graphql/build.gradle.kts index a589e4fc4b0..d92dc52c6d7 100644 --- a/sentry-graphql/build.gradle.kts +++ b/sentry-graphql/build.gradle.kts @@ -8,7 +8,7 @@ plugins { alias(libs.plugins.errorprone) alias(libs.plugins.gradle.versions) alias(libs.plugins.buildconfig) - alias(libs.plugins.animalsniffer) + id("io.sentry.animalsniffer") } tasks.withType().configureEach { @@ -28,8 +28,6 @@ dependencies { errorprone(libs.nopen.checker) errorprone(libs.nullaway) - signature("org.codehaus.mojo.signature:java18:${libs.versions.java18Signature.get()}@signature") - // tests testImplementation(projects.sentry) testImplementation(projects.sentryTestSupport) @@ -44,8 +42,6 @@ dependencies { testImplementation("com.netflix.graphql.dgs:graphql-error-types:4.9.2") } -tasks { check { dependsOn(animalsnifferMain) } } - tasks.withType().configureEach { options.errorprone { check("NullAway", net.ltgt.gradle.errorprone.CheckSeverity.ERROR) diff --git a/sentry-jcache/build.gradle.kts b/sentry-jcache/build.gradle.kts index db85b99012b..b388f35881f 100644 --- a/sentry-jcache/build.gradle.kts +++ b/sentry-jcache/build.gradle.kts @@ -8,7 +8,7 @@ plugins { alias(libs.plugins.errorprone) alias(libs.plugins.gradle.versions) alias(libs.plugins.buildconfig) - alias(libs.plugins.animalsniffer) + id("io.sentry.animalsniffer") } tasks.withType().configureEach { @@ -27,8 +27,6 @@ dependencies { errorprone(libs.nopen.checker) errorprone(libs.nullaway) - signature("org.codehaus.mojo.signature:java18:${libs.versions.java18Signature.get()}@signature") - // tests testImplementation(projects.sentry) testImplementation(projects.sentryTestSupport) @@ -39,8 +37,6 @@ dependencies { testImplementation(libs.mockito.inline) } -tasks { check { dependsOn(animalsnifferMain) } } - tasks.withType().configureEach { options.errorprone { check("NullAway", net.ltgt.gradle.errorprone.CheckSeverity.ERROR) diff --git a/sentry-jdbc/build.gradle.kts b/sentry-jdbc/build.gradle.kts index 179af2b7f32..e2a7f573138 100644 --- a/sentry-jdbc/build.gradle.kts +++ b/sentry-jdbc/build.gradle.kts @@ -8,7 +8,7 @@ plugins { alias(libs.plugins.errorprone) alias(libs.plugins.gradle.versions) alias(libs.plugins.buildconfig) - alias(libs.plugins.animalsniffer) + id("io.sentry.animalsniffer") } tasks.withType().configureEach { @@ -25,8 +25,6 @@ dependencies { errorprone(libs.nopen.checker) errorprone(libs.nullaway) - signature("org.codehaus.mojo.signature:java18:${libs.versions.java18Signature.get()}@signature") - // tests testImplementation(projects.sentryTestSupport) testImplementation(kotlin(Config.kotlinStdLib)) @@ -37,8 +35,6 @@ dependencies { testImplementation(libs.mockito.inline) } -tasks { check { dependsOn(animalsnifferMain) } } - tasks.withType().configureEach { options.errorprone { check("NullAway", net.ltgt.gradle.errorprone.CheckSeverity.ERROR) diff --git a/sentry-jul/build.gradle.kts b/sentry-jul/build.gradle.kts index 95513d35a85..2eec61eb171 100644 --- a/sentry-jul/build.gradle.kts +++ b/sentry-jul/build.gradle.kts @@ -8,7 +8,7 @@ plugins { alias(libs.plugins.errorprone) alias(libs.plugins.gradle.versions) alias(libs.plugins.buildconfig) - alias(libs.plugins.animalsniffer) + id("io.sentry.animalsniffer") } tasks.withType().configureEach { @@ -25,8 +25,6 @@ dependencies { errorprone(libs.nopen.checker) errorprone(libs.nullaway) - signature("org.codehaus.mojo.signature:java18:${libs.versions.java18Signature.get()}@signature") - // tests testImplementation(projects.sentryTestSupport) testImplementation(kotlin(Config.kotlinStdLib)) @@ -36,8 +34,6 @@ dependencies { testImplementation(libs.slf4j.api) } -tasks { check { dependsOn(animalsnifferMain) } } - tasks { test { // used to test io.sentry.jul.SentryHandler diff --git a/sentry-kafka/build.gradle.kts b/sentry-kafka/build.gradle.kts index 631595ead29..0d543bad270 100644 --- a/sentry-kafka/build.gradle.kts +++ b/sentry-kafka/build.gradle.kts @@ -8,7 +8,7 @@ plugins { alias(libs.plugins.errorprone) alias(libs.plugins.gradle.versions) alias(libs.plugins.buildconfig) - alias(libs.plugins.animalsniffer) + id("io.sentry.animalsniffer") } tasks.withType().configureEach { @@ -25,8 +25,6 @@ dependencies { errorprone(libs.nopen.checker) errorprone(libs.nullaway) - signature("org.codehaus.mojo.signature:java18:${libs.versions.java18Signature.get()}@signature") - // tests testImplementation(projects.sentryTestSupport) testImplementation(kotlin(Config.kotlinStdLib)) @@ -36,8 +34,6 @@ dependencies { testImplementation(libs.kafka.clients) } -tasks { check { dependsOn(animalsnifferMain) } } - tasks.withType().configureEach { options.errorprone { check("NullAway", net.ltgt.gradle.errorprone.CheckSeverity.ERROR) diff --git a/sentry-kotlin-extensions/build.gradle.kts b/sentry-kotlin-extensions/build.gradle.kts index 53f5ee5328e..101761b2a82 100644 --- a/sentry-kotlin-extensions/build.gradle.kts +++ b/sentry-kotlin-extensions/build.gradle.kts @@ -8,7 +8,7 @@ plugins { alias(libs.plugins.errorprone) alias(libs.plugins.gradle.versions) alias(libs.plugins.detekt) - alias(libs.plugins.animalsniffer) + id("io.sentry.animalsniffer.android") } tasks.withType().configureEach { @@ -32,14 +32,8 @@ dependencies { testImplementation(libs.kotlinx.coroutines) testImplementation(libs.kotlinx.coroutines.test) testImplementation(libs.mockito.kotlin) - - val gummyBearsModule = libs.gummy.bears.api21.get().module - signature("${gummyBearsModule}:${libs.versions.gummyBears.get()}@signature") - signature("org.codehaus.mojo.signature:java18:${libs.versions.java18Signature.get()}@signature") } -tasks { check { dependsOn(animalsnifferMain) } } - tasks.withType().configureEach { // Target version of the generated JVM bytecode. It is used for type resolution. jvmTarget = JavaVersion.VERSION_1_8.toString() diff --git a/sentry-ktor-client/build.gradle.kts b/sentry-ktor-client/build.gradle.kts index 4b8e176d5c6..fefcdbfebaf 100644 --- a/sentry-ktor-client/build.gradle.kts +++ b/sentry-ktor-client/build.gradle.kts @@ -8,7 +8,7 @@ plugins { alias(libs.plugins.errorprone) alias(libs.plugins.gradle.versions) alias(libs.plugins.buildconfig) - alias(libs.plugins.animalsniffer) + id("io.sentry.animalsniffer.android") } tasks.withType().configureEach { @@ -39,14 +39,8 @@ dependencies { testImplementation(libs.ktor.client.core) testImplementation(libs.ktor.client.java) testImplementation(libs.okhttp.mockwebserver) - - val gummyBearsModule = libs.gummy.bears.api21.get().module - signature("${gummyBearsModule}:${libs.versions.gummyBears.get()}@signature") - signature("org.codehaus.mojo.signature:java18:${libs.versions.java18Signature.get()}@signature") } -tasks { check { dependsOn(animalsnifferMain) } } - buildConfig { useJavaOutput() packageName("io.sentry.ktorClient") diff --git a/sentry-launchdarkly-server/build.gradle.kts b/sentry-launchdarkly-server/build.gradle.kts index 00de8e61b6b..95aba9faaf5 100644 --- a/sentry-launchdarkly-server/build.gradle.kts +++ b/sentry-launchdarkly-server/build.gradle.kts @@ -8,7 +8,7 @@ plugins { alias(libs.plugins.errorprone) alias(libs.plugins.gradle.versions) alias(libs.plugins.buildconfig) - alias(libs.plugins.animalsniffer) + id("io.sentry.animalsniffer") } tasks.withType().configureEach { @@ -28,8 +28,6 @@ dependencies { errorprone(libs.nopen.checker) errorprone(libs.nullaway) - signature("org.codehaus.mojo.signature:java18:${libs.versions.java18Signature.get()}@signature") - // tests testImplementation(projects.sentry) testImplementation(projects.sentryTestSupport) @@ -40,8 +38,6 @@ dependencies { testImplementation(libs.launchdarkly.server) } -tasks { check { dependsOn(animalsnifferMain) } } - tasks.withType().configureEach { options.errorprone { check("NullAway", net.ltgt.gradle.errorprone.CheckSeverity.ERROR) diff --git a/sentry-log4j2/build.gradle.kts b/sentry-log4j2/build.gradle.kts index 226f0f7544d..6e5250ece50 100644 --- a/sentry-log4j2/build.gradle.kts +++ b/sentry-log4j2/build.gradle.kts @@ -8,7 +8,7 @@ plugins { alias(libs.plugins.errorprone) alias(libs.plugins.gradle.versions) alias(libs.plugins.buildconfig) - alias(libs.plugins.animalsniffer) + id("io.sentry.animalsniffer") } tasks.withType().configureEach { @@ -27,8 +27,6 @@ dependencies { errorprone(libs.nopen.checker) errorprone(libs.nullaway) - signature("org.codehaus.mojo.signature:java18:${libs.versions.java18Signature.get()}@signature") - // tests testImplementation(projects.sentryTestSupport) testImplementation(kotlin(Config.kotlinStdLib)) @@ -38,8 +36,6 @@ dependencies { testImplementation(libs.mockito.kotlin) } -tasks { check { dependsOn(animalsnifferMain) } } - buildConfig { useJavaOutput() packageName("io.sentry.log4j2") diff --git a/sentry-logback/build.gradle.kts b/sentry-logback/build.gradle.kts index 0b6be5753a4..5fd6c975231 100644 --- a/sentry-logback/build.gradle.kts +++ b/sentry-logback/build.gradle.kts @@ -8,7 +8,7 @@ plugins { alias(libs.plugins.errorprone) alias(libs.plugins.gradle.versions) alias(libs.plugins.buildconfig) - alias(libs.plugins.animalsniffer) + id("io.sentry.animalsniffer") } tasks.withType().configureEach { @@ -25,8 +25,6 @@ dependencies { errorprone(libs.nopen.checker) errorprone(libs.nullaway) - signature("org.codehaus.mojo.signature:java18:${libs.versions.java18Signature.get()}@signature") - // tests testImplementation(projects.sentryTestSupport) testImplementation(kotlin(Config.kotlinStdLib)) @@ -35,8 +33,6 @@ dependencies { testImplementation(libs.mockito.kotlin) } -tasks { check { dependsOn(animalsnifferMain) } } - buildConfig { useJavaOutput() packageName("io.sentry.logback") diff --git a/sentry-okhttp/build.gradle.kts b/sentry-okhttp/build.gradle.kts index eced752ed68..47b8bfe5b15 100644 --- a/sentry-okhttp/build.gradle.kts +++ b/sentry-okhttp/build.gradle.kts @@ -8,7 +8,7 @@ plugins { alias(libs.plugins.errorprone) alias(libs.plugins.gradle.versions) alias(libs.plugins.buildconfig) - alias(libs.plugins.animalsniffer) + id("io.sentry.animalsniffer.android") } tasks.withType().configureEach { @@ -38,14 +38,8 @@ dependencies { testImplementation(libs.mockito.inline) testImplementation(libs.okhttp) testImplementation(libs.okhttp.mockwebserver) - - val gummyBearsModule = libs.gummy.bears.api21.get().module - signature("${gummyBearsModule}:${libs.versions.gummyBears.get()}@signature") - signature("org.codehaus.mojo.signature:java18:${libs.versions.java18Signature.get()}@signature") } -tasks { check { dependsOn(animalsnifferMain) } } - buildConfig { useJavaOutput() packageName("io.sentry.okhttp") diff --git a/sentry-openfeature/build.gradle.kts b/sentry-openfeature/build.gradle.kts index fbb819ad57b..b079ead1fc5 100644 --- a/sentry-openfeature/build.gradle.kts +++ b/sentry-openfeature/build.gradle.kts @@ -8,7 +8,7 @@ plugins { alias(libs.plugins.errorprone) alias(libs.plugins.gradle.versions) alias(libs.plugins.buildconfig) - alias(libs.plugins.animalsniffer) + id("io.sentry.animalsniffer") } tasks.withType().configureEach { @@ -28,8 +28,6 @@ dependencies { errorprone(libs.nopen.checker) errorprone(libs.nullaway) - signature("org.codehaus.mojo.signature:java18:${libs.versions.java18Signature.get()}@signature") - // tests testImplementation(projects.sentry) testImplementation(projects.sentryTestSupport) @@ -40,8 +38,6 @@ dependencies { testImplementation(libs.openfeature) } -tasks { check { dependsOn(animalsnifferMain) } } - tasks.withType().configureEach { options.errorprone { check("NullAway", net.ltgt.gradle.errorprone.CheckSeverity.ERROR) diff --git a/sentry-openfeign/build.gradle.kts b/sentry-openfeign/build.gradle.kts index 56205bf1eea..3baa85dee26 100644 --- a/sentry-openfeign/build.gradle.kts +++ b/sentry-openfeign/build.gradle.kts @@ -8,7 +8,7 @@ plugins { alias(libs.plugins.errorprone) alias(libs.plugins.gradle.versions) alias(libs.plugins.buildconfig) - alias(libs.plugins.animalsniffer) + id("io.sentry.animalsniffer") } tasks.withType().configureEach { @@ -25,8 +25,6 @@ dependencies { errorprone(libs.nopen.checker) errorprone(libs.nullaway) - signature("org.codehaus.mojo.signature:java18:${libs.versions.java18Signature.get()}@signature") - // tests testImplementation(projects.sentryTestSupport) testImplementation(kotlin(Config.kotlinStdLib)) @@ -37,8 +35,6 @@ dependencies { testImplementation(libs.okhttp.mockwebserver) } -tasks { check { dependsOn(animalsnifferMain) } } - tasks.withType().configureEach { options.errorprone { check("NullAway", net.ltgt.gradle.errorprone.CheckSeverity.ERROR) diff --git a/sentry-opentelemetry/sentry-opentelemetry-agent/build.gradle.kts b/sentry-opentelemetry/sentry-opentelemetry-agent/build.gradle.kts index 7720fabec7f..054db790dc2 100644 --- a/sentry-opentelemetry/sentry-opentelemetry-agent/build.gradle.kts +++ b/sentry-opentelemetry/sentry-opentelemetry-agent/build.gradle.kts @@ -2,7 +2,7 @@ import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar plugins { `java-library` - alias(libs.plugins.animalsniffer) + id("io.sentry.animalsniffer") id("io.sentry.javadoc") alias(libs.plugins.shadow) } @@ -76,11 +76,8 @@ dependencies { bootstrapLibs(projects.sentryOpentelemetry.sentryOpentelemetryBootstrap) javaagentLibs(projects.sentryOpentelemetry.sentryOpentelemetryAgentcustomization) upstreamAgent(libs.otel.javaagent) - signature("org.codehaus.mojo.signature:java18:${libs.versions.java18Signature.get()}@signature") } -tasks { check { dependsOn(animalsnifferMain) } } - fun isolateClasses(jars: Iterable): CopySpec = copySpec { jars.forEach { from(zipTree(it)) { diff --git a/sentry-opentelemetry/sentry-opentelemetry-agentcustomization/build.gradle.kts b/sentry-opentelemetry/sentry-opentelemetry-agentcustomization/build.gradle.kts index 56a1a26dead..087568d03ee 100644 --- a/sentry-opentelemetry/sentry-opentelemetry-agentcustomization/build.gradle.kts +++ b/sentry-opentelemetry/sentry-opentelemetry-agentcustomization/build.gradle.kts @@ -3,7 +3,7 @@ import org.jetbrains.kotlin.gradle.tasks.KotlinCompile plugins { `java-library` - alias(libs.plugins.animalsniffer) + id("io.sentry.animalsniffer") id("io.sentry.javadoc") alias(libs.plugins.kotlin.jvm) alias(libs.plugins.errorprone) @@ -33,8 +33,6 @@ dependencies { errorprone(libs.nopen.checker) errorprone(libs.nullaway) - signature("org.codehaus.mojo.signature:java18:${libs.versions.java18Signature.get()}@signature") - // tests testImplementation(projects.sentryTestSupport) testImplementation(kotlin(Config.kotlinStdLib)) @@ -43,8 +41,6 @@ dependencies { testImplementation(libs.mockito.kotlin) } -tasks { check { dependsOn(animalsnifferMain) } } - tasks.withType().configureEach { options.errorprone { check("NullAway", net.ltgt.gradle.errorprone.CheckSeverity.ERROR) diff --git a/sentry-opentelemetry/sentry-opentelemetry-agentless-spring/build.gradle.kts b/sentry-opentelemetry/sentry-opentelemetry-agentless-spring/build.gradle.kts index 16d6d2f6145..5a94dcd4422 100644 --- a/sentry-opentelemetry/sentry-opentelemetry-agentless-spring/build.gradle.kts +++ b/sentry-opentelemetry/sentry-opentelemetry-agentless-spring/build.gradle.kts @@ -2,7 +2,7 @@ plugins { `java-library` id("io.sentry.javadoc") alias(libs.plugins.buildconfig) - alias(libs.plugins.animalsniffer) + id("io.sentry.animalsniffer") } dependencies { @@ -15,11 +15,8 @@ dependencies { api(libs.otel.semconv.incubating) api(libs.otel.extension.autoconfigure) api(libs.springboot3.otel) - signature("org.codehaus.mojo.signature:java18:${libs.versions.java18Signature.get()}@signature") } -tasks { check { dependsOn(animalsnifferMain) } } - buildConfig { useJavaOutput() packageName("io.sentry.opentelemetry.agentless.spring") diff --git a/sentry-opentelemetry/sentry-opentelemetry-agentless/build.gradle.kts b/sentry-opentelemetry/sentry-opentelemetry-agentless/build.gradle.kts index 148877d48bf..72508d73737 100644 --- a/sentry-opentelemetry/sentry-opentelemetry-agentless/build.gradle.kts +++ b/sentry-opentelemetry/sentry-opentelemetry-agentless/build.gradle.kts @@ -2,7 +2,7 @@ plugins { `java-library` id("io.sentry.javadoc") alias(libs.plugins.buildconfig) - alias(libs.plugins.animalsniffer) + id("io.sentry.animalsniffer") } dependencies { @@ -13,11 +13,8 @@ dependencies { api(libs.otel.semconv) api(libs.otel.semconv.incubating) api(libs.otel.extension.autoconfigure) - signature("org.codehaus.mojo.signature:java18:${libs.versions.java18Signature.get()}@signature") } -tasks { check { dependsOn(animalsnifferMain) } } - buildConfig { useJavaOutput() packageName("io.sentry.opentelemetry.agentless") diff --git a/sentry-opentelemetry/sentry-opentelemetry-bootstrap/build.gradle.kts b/sentry-opentelemetry/sentry-opentelemetry-bootstrap/build.gradle.kts index 7df51873131..b69ae1be7b4 100644 --- a/sentry-opentelemetry/sentry-opentelemetry-bootstrap/build.gradle.kts +++ b/sentry-opentelemetry/sentry-opentelemetry-bootstrap/build.gradle.kts @@ -3,7 +3,7 @@ import org.jetbrains.kotlin.gradle.tasks.KotlinCompile plugins { `java-library` - alias(libs.plugins.animalsniffer) + id("io.sentry.animalsniffer") id("io.sentry.javadoc") alias(libs.plugins.kotlin.jvm) alias(libs.plugins.errorprone) @@ -24,8 +24,6 @@ dependencies { errorprone(libs.nopen.checker) errorprone(libs.nullaway) - signature("org.codehaus.mojo.signature:java18:${libs.versions.java18Signature.get()}@signature") - // tests testImplementation(projects.sentryTestSupport) testImplementation(kotlin(Config.kotlinStdLib)) @@ -38,8 +36,6 @@ dependencies { testImplementation(libs.otel.semconv.incubating) } -tasks { check { dependsOn(animalsnifferMain) } } - tasks.withType().configureEach { options.errorprone { check("NullAway", net.ltgt.gradle.errorprone.CheckSeverity.ERROR) diff --git a/sentry-opentelemetry/sentry-opentelemetry-core/build.gradle.kts b/sentry-opentelemetry/sentry-opentelemetry-core/build.gradle.kts index 53010735c62..7c92b8a87a5 100644 --- a/sentry-opentelemetry/sentry-opentelemetry-core/build.gradle.kts +++ b/sentry-opentelemetry/sentry-opentelemetry-core/build.gradle.kts @@ -3,7 +3,7 @@ import org.jetbrains.kotlin.gradle.tasks.KotlinCompile plugins { `java-library` - alias(libs.plugins.animalsniffer) + id("io.sentry.animalsniffer") id("io.sentry.javadoc") alias(libs.plugins.kotlin.jvm) alias(libs.plugins.errorprone) @@ -33,8 +33,6 @@ dependencies { errorprone(libs.nopen.checker) errorprone(libs.nullaway) - signature("org.codehaus.mojo.signature:java18:${libs.versions.java18Signature.get()}@signature") - // tests testImplementation(projects.sentryOpentelemetry.sentryOpentelemetryBootstrap) testImplementation(projects.sentryTestSupport) @@ -48,8 +46,6 @@ dependencies { testImplementation(libs.otel.semconv.incubating) } -tasks { check { dependsOn(animalsnifferMain) } } - tasks.withType().configureEach { options.errorprone { check("NullAway", net.ltgt.gradle.errorprone.CheckSeverity.ERROR) diff --git a/sentry-opentelemetry/sentry-opentelemetry-otlp-spring/build.gradle.kts b/sentry-opentelemetry/sentry-opentelemetry-otlp-spring/build.gradle.kts index 9d3f1d1646a..8a5093a6570 100644 --- a/sentry-opentelemetry/sentry-opentelemetry-otlp-spring/build.gradle.kts +++ b/sentry-opentelemetry/sentry-opentelemetry-otlp-spring/build.gradle.kts @@ -1,17 +1,14 @@ plugins { `java-library` - alias(libs.plugins.animalsniffer) + id("io.sentry.animalsniffer") id("io.sentry.javadoc") } dependencies { api(projects.sentryOpentelemetry.sentryOpentelemetryOtlp) implementation(libs.springboot3.otel) - signature("org.codehaus.mojo.signature:java18:${libs.versions.java18Signature.get()}@signature") } -tasks { check { dependsOn(animalsnifferMain) } } - tasks.jar { manifest { attributes( diff --git a/sentry-opentelemetry/sentry-opentelemetry-otlp/build.gradle.kts b/sentry-opentelemetry/sentry-opentelemetry-otlp/build.gradle.kts index 1d81d2dc7c6..1792c852dc3 100644 --- a/sentry-opentelemetry/sentry-opentelemetry-otlp/build.gradle.kts +++ b/sentry-opentelemetry/sentry-opentelemetry-otlp/build.gradle.kts @@ -3,7 +3,7 @@ import org.jetbrains.kotlin.gradle.tasks.KotlinCompile plugins { `java-library` - alias(libs.plugins.animalsniffer) + id("io.sentry.animalsniffer") id("io.sentry.javadoc") alias(libs.plugins.kotlin.jvm) alias(libs.plugins.errorprone) @@ -30,8 +30,6 @@ dependencies { errorprone(libs.nopen.checker) errorprone(libs.nullaway) - signature("org.codehaus.mojo.signature:java18:${libs.versions.java18Signature.get()}@signature") - // tests testImplementation(projects.sentryTestSupport) testImplementation(kotlin(Config.kotlinStdLib)) @@ -44,8 +42,6 @@ dependencies { // testImplementation(libs.otel.semconv.incubating) } -tasks { check { dependsOn(animalsnifferMain) } } - tasks.withType().configureEach { options.errorprone { check("NullAway", net.ltgt.gradle.errorprone.CheckSeverity.ERROR) diff --git a/sentry-quartz/build.gradle.kts b/sentry-quartz/build.gradle.kts index 53fe454f82a..f4f0d9d07d2 100644 --- a/sentry-quartz/build.gradle.kts +++ b/sentry-quartz/build.gradle.kts @@ -8,7 +8,7 @@ plugins { alias(libs.plugins.errorprone) alias(libs.plugins.gradle.versions) alias(libs.plugins.buildconfig) - alias(libs.plugins.animalsniffer) + id("io.sentry.animalsniffer") } tasks.withType().configureEach { @@ -27,8 +27,6 @@ dependencies { errorprone(libs.nopen.checker) errorprone(libs.nullaway) - signature("org.codehaus.mojo.signature:java18:${libs.versions.java18Signature.get()}@signature") - // tests testImplementation(projects.sentry) testImplementation(projects.sentryTestSupport) @@ -38,8 +36,6 @@ dependencies { testImplementation(libs.mockito.inline) } -tasks { check { dependsOn(animalsnifferMain) } } - tasks.withType().configureEach { options.errorprone { check("NullAway", net.ltgt.gradle.errorprone.CheckSeverity.ERROR) diff --git a/sentry-servlet-jakarta/build.gradle.kts b/sentry-servlet-jakarta/build.gradle.kts index 15c4a9069ca..5762a4ae52b 100644 --- a/sentry-servlet-jakarta/build.gradle.kts +++ b/sentry-servlet-jakarta/build.gradle.kts @@ -8,7 +8,7 @@ plugins { alias(libs.plugins.errorprone) alias(libs.plugins.gradle.versions) alias(libs.plugins.buildconfig) - alias(libs.plugins.animalsniffer) + id("io.sentry.animalsniffer") } tasks.withType().configureEach { @@ -27,8 +27,6 @@ dependencies { errorprone(libs.nopen.checker) errorprone(libs.nullaway) - signature("org.codehaus.mojo.signature:java18:${libs.versions.java18Signature.get()}@signature") - // tests testImplementation(projects.sentryTestSupport) testImplementation(kotlin(Config.kotlinStdLib)) @@ -38,8 +36,6 @@ dependencies { testImplementation(libs.servlet.jakarta.api) } -tasks { check { dependsOn(animalsnifferMain) } } - tasks.withType().configureEach { options.errorprone { check("NullAway", net.ltgt.gradle.errorprone.CheckSeverity.ERROR) diff --git a/sentry-servlet/build.gradle.kts b/sentry-servlet/build.gradle.kts index db5298275fa..c2e3fe8e52e 100644 --- a/sentry-servlet/build.gradle.kts +++ b/sentry-servlet/build.gradle.kts @@ -8,7 +8,7 @@ plugins { alias(libs.plugins.errorprone) alias(libs.plugins.gradle.versions) alias(libs.plugins.buildconfig) - alias(libs.plugins.animalsniffer) + id("io.sentry.animalsniffer") } tasks.withType().configureEach { @@ -27,8 +27,6 @@ dependencies { errorprone(libs.nopen.checker) errorprone(libs.nullaway) - signature("org.codehaus.mojo.signature:java18:${libs.versions.java18Signature.get()}@signature") - // tests testImplementation(projects.sentryTestSupport) testImplementation(kotlin(Config.kotlinStdLib)) @@ -39,8 +37,6 @@ dependencies { testImplementation(libs.springboot.starter.web) } -tasks { check { dependsOn(animalsnifferMain) } } - tasks.withType().configureEach { options.errorprone { check("NullAway", net.ltgt.gradle.errorprone.CheckSeverity.ERROR) diff --git a/sentry-spotlight/build.gradle.kts b/sentry-spotlight/build.gradle.kts index f4beef73ffb..a8d538c2e2e 100644 --- a/sentry-spotlight/build.gradle.kts +++ b/sentry-spotlight/build.gradle.kts @@ -7,7 +7,7 @@ plugins { alias(libs.plugins.kotlin.jvm) alias(libs.plugins.errorprone) alias(libs.plugins.gradle.versions) - alias(libs.plugins.animalsniffer) + id("io.sentry.animalsniffer.android") alias(libs.plugins.buildconfig) } @@ -30,14 +30,8 @@ dependencies { testImplementation(libs.mockito.kotlin) testImplementation(libs.mockito.inline) testImplementation(projects.sentryTestSupport) - - val gummyBearsModule = libs.gummy.bears.api21.get().module - signature("${gummyBearsModule}:${libs.versions.gummyBears.get()}@signature") - signature("org.codehaus.mojo.signature:java18:${libs.versions.java18Signature.get()}@signature") } -tasks { check { dependsOn(animalsnifferMain) } } - buildConfig { useJavaOutput() packageName("io.sentry.spotlight") diff --git a/sentry-spring-boot-starter/build.gradle.kts b/sentry-spring-boot-starter/build.gradle.kts index d814c38d35b..cd05baecc4d 100644 --- a/sentry-spring-boot-starter/build.gradle.kts +++ b/sentry-spring-boot-starter/build.gradle.kts @@ -3,7 +3,7 @@ import org.jetbrains.kotlin.gradle.tasks.KotlinCompile plugins { `java-library` - alias(libs.plugins.animalsniffer) + id("io.sentry.animalsniffer") id("io.sentry.javadoc") alias(libs.plugins.kotlin.jvm) alias(libs.plugins.errorprone) @@ -29,11 +29,8 @@ dependencies { errorprone(libs.errorprone.core) errorprone(libs.nopen.checker) errorprone(libs.nullaway) - signature("org.codehaus.mojo.signature:java18:${libs.versions.java18Signature.get()}@signature") } -tasks { check { dependsOn(animalsnifferMain) } } - tasks.withType().configureEach { options.errorprone { check("NullAway", net.ltgt.gradle.errorprone.CheckSeverity.ERROR) diff --git a/sentry-spring-boot/build.gradle.kts b/sentry-spring-boot/build.gradle.kts index 87e957f8409..947eaf9b03a 100644 --- a/sentry-spring-boot/build.gradle.kts +++ b/sentry-spring-boot/build.gradle.kts @@ -9,7 +9,7 @@ plugins { alias(libs.plugins.errorprone) alias(libs.plugins.gradle.versions) alias(libs.plugins.buildconfig) - alias(libs.plugins.animalsniffer) + id("io.sentry.animalsniffer") } tasks.withType().configureEach { @@ -56,8 +56,6 @@ dependencies { errorprone(libs.nopen.checker) errorprone(libs.nullaway) - signature("org.codehaus.mojo.signature:java18:${libs.versions.java18Signature.get()}@signature") - // tests testImplementation(projects.sentryLogback) testImplementation(projects.sentryQuartz) @@ -87,8 +85,6 @@ dependencies { testImplementation(projects.sentryAsyncProfiler) } -tasks { check { dependsOn(animalsnifferMain) } } - buildConfig { useJavaOutput() packageName("io.sentry.spring.boot") diff --git a/sentry-spring/build.gradle.kts b/sentry-spring/build.gradle.kts index 409d96e7f30..03176d7b867 100644 --- a/sentry-spring/build.gradle.kts +++ b/sentry-spring/build.gradle.kts @@ -9,7 +9,7 @@ plugins { alias(libs.plugins.errorprone) alias(libs.plugins.gradle.versions) alias(libs.plugins.buildconfig) - alias(libs.plugins.animalsniffer) + id("io.sentry.animalsniffer") } tasks.withType().configureEach { @@ -45,8 +45,6 @@ dependencies { errorprone(libs.nopen.checker) errorprone(libs.nullaway) - signature("org.codehaus.mojo.signature:java18:${libs.versions.java18Signature.get()}@signature") - // tests testImplementation(projects.sentryTestSupport) testImplementation(projects.sentryGraphql) @@ -66,8 +64,6 @@ dependencies { testImplementation(libs.springboot.starter.webflux) } -tasks { check { dependsOn(animalsnifferMain) } } - buildConfig { useJavaOutput() packageName("io.sentry.spring") diff --git a/sentry/build.gradle.kts b/sentry/build.gradle.kts index 896a2e954c9..136e2d097e4 100644 --- a/sentry/build.gradle.kts +++ b/sentry/build.gradle.kts @@ -8,7 +8,7 @@ plugins { alias(libs.plugins.errorprone) alias(libs.plugins.gradle.versions) alias(libs.plugins.buildconfig) - alias(libs.plugins.animalsniffer) + id("io.sentry.animalsniffer.android") } tasks.withType().configureEach { @@ -32,27 +32,16 @@ dependencies { testImplementation(libs.msgpack) testImplementation(libs.okio) testImplementation(projects.sentryTestSupport) - - val gummyBearsModule = libs.gummy.bears.api21.get().module - signature("${gummyBearsModule}:${libs.versions.gummyBears.get()}@signature") - signature("org.codehaus.mojo.signature:java18:${libs.versions.java18Signature.get()}@signature") -} - -animalsniffer { - ignore = - listOf( - // We manually check on Android if it's available (API 26+). - "java.time.Instant" - ) } -tasks.animalsnifferMain { +sentryAnimalSniffer { + // We manually check on Android if it's available (API 26+). + ignoredClasses.add("java.time.Instant") // Uses java.util.function.Supplier, but must be manually invoked. - exclude("**/io/sentry/SentryWrapper.class") + mainExcludes.add("**/io/sentry/SentryWrapper.class") } tasks { - check { dependsOn(animalsnifferMain) } test { // java.lang open is needed by tests that reflectively rewrite Class names; it was previously // provided implicitly by the jacoco test agent, which has been removed. From 2c8712b22eae63317f56d35b4d5a64545a4e997c Mon Sep 17 00:00:00 2001 From: Alexander Dinauer Date: Thu, 9 Jul 2026 10:18:17 +0200 Subject: [PATCH 3/6] build: Use catalog aliases for Animal Sniffer signatures Move Java 8 signature coordinates into the version catalog and add a shared helper for registering Animal Sniffer signature dependencies. Co-Authored-By: Claude --- .../gradle/SentryAnimalSnifferPlugin.kt | 26 +++++++++---------- gradle/libs.versions.toml | 1 + 2 files changed, 14 insertions(+), 13 deletions(-) diff --git a/build-logic/src/main/kotlin/io/sentry/gradle/SentryAnimalSnifferPlugin.kt b/build-logic/src/main/kotlin/io/sentry/gradle/SentryAnimalSnifferPlugin.kt index 03463470a71..48de0ea8dd0 100644 --- a/build-logic/src/main/kotlin/io/sentry/gradle/SentryAnimalSnifferPlugin.kt +++ b/build-logic/src/main/kotlin/io/sentry/gradle/SentryAnimalSnifferPlugin.kt @@ -3,6 +3,7 @@ package io.sentry.gradle import javax.inject.Inject import org.gradle.api.Plugin import org.gradle.api.Project +import org.gradle.api.artifacts.MinimalExternalModuleDependency import org.gradle.api.artifacts.VersionCatalogsExtension import org.gradle.api.model.ObjectFactory import org.gradle.api.provider.ListProperty @@ -17,18 +18,13 @@ class SentryAnimalSnifferPlugin : Plugin { override fun apply(project: Project) { project.pluginManager.apply("ru.vyarus.animalsniffer") - val libs = project.extensions.getByType(VersionCatalogsExtension::class.java).named("libs") val extension = project.extensions.create( "sentryAnimalSniffer", SentryAnimalSnifferExtension::class.java, ) - val java18Version = libs.findVersion("java18Signature").get().requiredVersion - project.dependencies.add( - "signature", - "org.codehaus.mojo.signature:java18:$java18Version@signature", - ) + project.addSignatureDependency("java18-signature") project.tasks.matching { it.name == "check" }.configureEach { dependsOn("animalsnifferMain") @@ -50,12 +46,16 @@ class SentryAnimalSnifferAndroidPlugin : Plugin { override fun apply(project: Project) { project.pluginManager.apply(SentryAnimalSnifferPlugin::class.java) - val libs = project.extensions.getByType(VersionCatalogsExtension::class.java).named("libs") - val gummyBears = libs.findLibrary("gummy-bears-api21").get().get() - val gummyBearsVersion = libs.findVersion("gummyBears").get().requiredVersion - project.dependencies.add( - "signature", - "${gummyBears.module.group}:${gummyBears.module.name}:$gummyBearsVersion@signature", - ) + project.addSignatureDependency("gummy-bears-api21") } } + +private fun Project.addSignatureDependency(libraryName: String) { + val libs = extensions.getByType(VersionCatalogsExtension::class.java).named("libs") + dependencies.add("signature", signatureNotation(libs.findLibrary(libraryName).get().get())) +} + +private fun signatureNotation(dependency: MinimalExternalModuleDependency): String { + val module = "${dependency.module.group}:${dependency.module.name}" + return "$module:${dependency.versionConstraint.requiredVersion}@signature" +} diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 598a700f28e..0a4c2a2b841 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -229,6 +229,7 @@ timber = { module = "com.jakewharton.timber:timber", version = "4.7.1" } # Animalsniffer signature gummy-bears-api21 = { module = "com.toasttab.android:gummy-bears-api-21", version.ref = "gummyBears" } +java18-signature = { module = "org.codehaus.mojo.signature:java18", version.ref = "java18Signature" } # tomcat libraries tomcat-catalina = { module = "org.apache.tomcat:tomcat-catalina", version = "9.0.108" } From 555d74a3e960d238c6ff38133dc9a7bb29145a51 Mon Sep 17 00:00:00 2001 From: Alexander Dinauer Date: Thu, 9 Jul 2026 14:43:04 +0200 Subject: [PATCH 4/6] build: Remove Animal Sniffer reflection Configure Animal Sniffer tasks with the plugin task type directly so ignored classes can be set without reflective method lookup. Co-Authored-By: Claude --- .../kotlin/io/sentry/gradle/SentryAnimalSnifferPlugin.kt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/build-logic/src/main/kotlin/io/sentry/gradle/SentryAnimalSnifferPlugin.kt b/build-logic/src/main/kotlin/io/sentry/gradle/SentryAnimalSnifferPlugin.kt index 48de0ea8dd0..866e60ae74f 100644 --- a/build-logic/src/main/kotlin/io/sentry/gradle/SentryAnimalSnifferPlugin.kt +++ b/build-logic/src/main/kotlin/io/sentry/gradle/SentryAnimalSnifferPlugin.kt @@ -7,7 +7,7 @@ import org.gradle.api.artifacts.MinimalExternalModuleDependency import org.gradle.api.artifacts.VersionCatalogsExtension import org.gradle.api.model.ObjectFactory import org.gradle.api.provider.ListProperty -import org.gradle.api.tasks.SourceTask +import ru.vyarus.gradle.plugin.animalsniffer.AnimalSniffer abstract class SentryAnimalSnifferExtension @Inject constructor(objects: ObjectFactory) { val ignoredClasses: ListProperty = objects.listProperty(String::class.java) @@ -31,11 +31,11 @@ class SentryAnimalSnifferPlugin : Plugin { } project.afterEvaluate { - project.tasks.named("animalsnifferMain", SourceTask::class.java).configure { + project.tasks.named("animalsnifferMain", AnimalSniffer::class.java).configure { exclude(extension.mainExcludes.get()) val ignoredClasses = extension.ignoredClasses.get() if (ignoredClasses.isNotEmpty()) { - javaClass.getMethod("setIgnoreClasses", Iterable::class.java).invoke(this, ignoredClasses) + setIgnoreClasses(ignoredClasses) } } } From e53d6736283643333a9429620f858a077c53baa7 Mon Sep 17 00:00:00 2001 From: Alexander Dinauer Date: Thu, 9 Jul 2026 14:48:06 +0200 Subject: [PATCH 5/6] build: Avoid afterEvaluate for Animal Sniffer config Configure Animal Sniffer task options directly from the convention extension so the build does not defer configuration with afterEvaluate. Co-Authored-By: Claude --- .../gradle/SentryAnimalSnifferPlugin.kt | 39 +++++++++---------- sentry/build.gradle.kts | 4 +- 2 files changed, 21 insertions(+), 22 deletions(-) diff --git a/build-logic/src/main/kotlin/io/sentry/gradle/SentryAnimalSnifferPlugin.kt b/build-logic/src/main/kotlin/io/sentry/gradle/SentryAnimalSnifferPlugin.kt index 866e60ae74f..ed465a4155d 100644 --- a/build-logic/src/main/kotlin/io/sentry/gradle/SentryAnimalSnifferPlugin.kt +++ b/build-logic/src/main/kotlin/io/sentry/gradle/SentryAnimalSnifferPlugin.kt @@ -1,28 +1,36 @@ package io.sentry.gradle -import javax.inject.Inject import org.gradle.api.Plugin import org.gradle.api.Project import org.gradle.api.artifacts.MinimalExternalModuleDependency import org.gradle.api.artifacts.VersionCatalogsExtension -import org.gradle.api.model.ObjectFactory -import org.gradle.api.provider.ListProperty import ru.vyarus.gradle.plugin.animalsniffer.AnimalSniffer -abstract class SentryAnimalSnifferExtension @Inject constructor(objects: ObjectFactory) { - val ignoredClasses: ListProperty = objects.listProperty(String::class.java) - val mainExcludes: ListProperty = objects.listProperty(String::class.java) +open class SentryAnimalSnifferExtension(private val project: Project) { + fun ignoreClasses(vararg classes: String) { + project.tasks.named("animalsnifferMain", AnimalSniffer::class.java).configure { + val ignoredClasses = getIgnoreClasses().toMutableList() + ignoredClasses.addAll(classes) + setIgnoreClasses(ignoredClasses) + } + } + + fun mainExcludes(vararg excludes: String) { + project.tasks.named("animalsnifferMain", AnimalSniffer::class.java).configure { + exclude(*excludes) + } + } } class SentryAnimalSnifferPlugin : Plugin { override fun apply(project: Project) { project.pluginManager.apply("ru.vyarus.animalsniffer") - val extension = - project.extensions.create( - "sentryAnimalSniffer", - SentryAnimalSnifferExtension::class.java, - ) + project.extensions.create( + "sentryAnimalSniffer", + SentryAnimalSnifferExtension::class.java, + project, + ) project.addSignatureDependency("java18-signature") @@ -30,15 +38,6 @@ class SentryAnimalSnifferPlugin : Plugin { dependsOn("animalsnifferMain") } - project.afterEvaluate { - project.tasks.named("animalsnifferMain", AnimalSniffer::class.java).configure { - exclude(extension.mainExcludes.get()) - val ignoredClasses = extension.ignoredClasses.get() - if (ignoredClasses.isNotEmpty()) { - setIgnoreClasses(ignoredClasses) - } - } - } } } diff --git a/sentry/build.gradle.kts b/sentry/build.gradle.kts index 136e2d097e4..6b98ff790c6 100644 --- a/sentry/build.gradle.kts +++ b/sentry/build.gradle.kts @@ -36,9 +36,9 @@ dependencies { sentryAnimalSniffer { // We manually check on Android if it's available (API 26+). - ignoredClasses.add("java.time.Instant") + ignoreClasses("java.time.Instant") // Uses java.util.function.Supplier, but must be manually invoked. - mainExcludes.add("**/io/sentry/SentryWrapper.class") + mainExcludes("**/io/sentry/SentryWrapper.class") } tasks { From de9fc0fb2d827f21e0aa493ad696f55bc5a84b4f Mon Sep 17 00:00:00 2001 From: Nelson Osacky Date: Fri, 10 Jul 2026 10:08:06 +0200 Subject: [PATCH 6/6] build: Make Animal Sniffer extension config-only Move the task-wiring logic out of SentryAnimalSnifferExtension and into the plugin. The extension previously held a Project reference and reached into the animalsnifferMain task on every DSL call, mixing configuration with application logic. The extension now only declares intent via managed ListProperty values; the plugin reads them when configuring the task. This drops the Project reference (config-cache friendly) and needs no afterEvaluate, since the task-configuration action runs after the build script is evaluated. Co-Authored-By: Claude Opus 4.8 --- .../gradle/SentryAnimalSnifferPlugin.kt | 29 +++++++++---------- 1 file changed, 13 insertions(+), 16 deletions(-) diff --git a/build-logic/src/main/kotlin/io/sentry/gradle/SentryAnimalSnifferPlugin.kt b/build-logic/src/main/kotlin/io/sentry/gradle/SentryAnimalSnifferPlugin.kt index ed465a4155d..fc1749f35ac 100644 --- a/build-logic/src/main/kotlin/io/sentry/gradle/SentryAnimalSnifferPlugin.kt +++ b/build-logic/src/main/kotlin/io/sentry/gradle/SentryAnimalSnifferPlugin.kt @@ -4,21 +4,19 @@ import org.gradle.api.Plugin import org.gradle.api.Project import org.gradle.api.artifacts.MinimalExternalModuleDependency import org.gradle.api.artifacts.VersionCatalogsExtension +import org.gradle.api.provider.ListProperty import ru.vyarus.gradle.plugin.animalsniffer.AnimalSniffer -open class SentryAnimalSnifferExtension(private val project: Project) { +abstract class SentryAnimalSnifferExtension { + abstract val ignoredClasses: ListProperty + abstract val excludedClasses: ListProperty + fun ignoreClasses(vararg classes: String) { - project.tasks.named("animalsnifferMain", AnimalSniffer::class.java).configure { - val ignoredClasses = getIgnoreClasses().toMutableList() - ignoredClasses.addAll(classes) - setIgnoreClasses(ignoredClasses) - } + ignoredClasses.addAll(*classes) } fun mainExcludes(vararg excludes: String) { - project.tasks.named("animalsnifferMain", AnimalSniffer::class.java).configure { - exclude(*excludes) - } + excludedClasses.addAll(*excludes) } } @@ -26,18 +24,17 @@ class SentryAnimalSnifferPlugin : Plugin { override fun apply(project: Project) { project.pluginManager.apply("ru.vyarus.animalsniffer") - project.extensions.create( - "sentryAnimalSniffer", - SentryAnimalSnifferExtension::class.java, - project, - ) + val extension = + project.extensions.create("sentryAnimalSniffer", SentryAnimalSnifferExtension::class.java) project.addSignatureDependency("java18-signature") - project.tasks.matching { it.name == "check" }.configureEach { - dependsOn("animalsnifferMain") + project.tasks.named("animalsnifferMain", AnimalSniffer::class.java).configure { + ignoreClasses = ignoreClasses + extension.ignoredClasses.get() + exclude(extension.excludedClasses.get()) } + project.tasks.named("check").configure { dependsOn("animalsnifferMain") } } }