Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
30 commits
Select commit Hold shift + click to select a range
01efed6
build: Switch to JDK 21 and upgrade Mockito, Robolectric and Error Prone
markushi Oct 9, 2026
8ff189d
build: Compile tests for JDK 21 and fix buildSrc JVM target
markushi Oct 9, 2026
3dc76c0
build: Compile with a JDK 21 toolchain from a build-logic convention โ€ฆ
markushi Oct 13, 2026
26b8a60
docs(kafka): Explain the explicit double cast at the latency call site
markushi Oct 13, 2026
9788085
build: Compile the samples and their tests with the toolchain JDK
markushi Oct 13, 2026
f6de52d
Format code
getsentry-bot Oct 13, 2026
6e81176
build: Drop the now-unused JvmTarget imports from the samples
markushi Oct 13, 2026
1c7fbf3
build: Clarify the jvm-targets plugin comments and rename its helper
markushi Oct 13, 2026
5c8907d
Merge branch 'build/jdk-21' of github.com:getsentry/sentry-java into โ€ฆ
markushi Oct 13, 2026
7bd342c
build: Require JDK 21 to run Gradle again
markushi Oct 13, 2026
37b01cf
build: Keep the Spring Boot 2 sample apps on their published bytecodeโ€ฆ
markushi Oct 13, 2026
d663f01
ci: Drop the stale Java version from the build job name
markushi Oct 13, 2026
445f5e4
build: Keep Robolectric at 4.15 and leave its test environment untouched
markushi Oct 13, 2026
2de047f
build: Move the Java 8 release pin into the jvm-targets convention plโ€ฆ
markushi Oct 14, 2026
561324b
build: Drop the Error Prone and NullAway code fixes, they move to theโ€ฆ
markushi Oct 15, 2026
2c629ba
Merge remote-tracking branch 'origin/main' into build/jdk-21
markushi Oct 15, 2026
ddae2a9
ci: Drop the stale Java version from the build job name
markushi Oct 15, 2026
aaa1ef0
fix(core): Suppress the new Error Prone and javac 21 findings in the โ€ฆ
markushi Oct 15, 2026
fef4772
fix(core): Resolve the remaining Error Prone and javac 21 findings inโ€ฆ
markushi Oct 15, 2026
61c4352
build: Move the JDK and bytecode level decisions into the io.sentry.cโ€ฆ
markushi Oct 15, 2026
c667f66
Address PR comments
markushi Oct 15, 2026
4d4654d
test(android): Make the flush timeout verifies match the real log call
markushi Oct 15, 2026
982954a
chore(core): Reword the JDK 21 suppression comments
markushi Oct 15, 2026
38288e8
build: Keep only the javac unit test targets inside afterEvaluate
markushi Oct 16, 2026
e387384
Merge remote-tracking branch 'origin/main' into build/jdk-21
markushi Oct 16, 2026
a2345fc
build: Drop afterEvaluate, pin the Kotlin API level and rename the coโ€ฆ
markushi Oct 16, 2026
975708e
Fix JDK 21 findings in sentry-android-core (#6261)
markushi Oct 20, 2026
1ee7acc
Fix JDK 21 findings in the Spring modules (#6260)
markushi Oct 20, 2026
0f3f8bc
Fix JDK 21 findings in the JVM integrations (#6259)
markushi Oct 20, 2026
2b6f9fa
Merge branch 'main' into build/jdk-21
markushi Oct 20, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/agp-matrix.yml
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ jobs:
uses: actions/setup-java@b843ebf9b913146b38da2eaa7aeddf76074ae1ad # v6.1.0
with:
distribution: 'temurin'
java-version: '17'
java-version: '21'

- name: Setup Gradle
uses: gradle/actions/setup-gradle@3f5f9adaf7d9fecd50b5935e54106014257a94e6 # v6.4.0
Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ concurrency:
jobs:
build:
# Job name is a required status check in the main branch ruleset; keep it stable.
name: Build Job ubuntu-latest - Java 17
name: Build Job ubuntu-latest
runs-on: ubuntu-latest

env:
Expand All @@ -29,7 +29,7 @@ jobs:
uses: actions/setup-java@b843ebf9b913146b38da2eaa7aeddf76074ae1ad # v6.1.0
with:
distribution: 'temurin'
java-version: '17'
java-version: '21'

# Workaround for https://github.com/gradle/actions/issues/21 to use config cache
- name: Cache buildSrc
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/codeql-analysis.yml
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ jobs:
uses: actions/setup-java@b843ebf9b913146b38da2eaa7aeddf76074ae1ad # v6.1.0
with:
distribution: 'temurin'
java-version: '17'
java-version: '21'

- name: Setup Gradle
uses: gradle/actions/setup-gradle@3f5f9adaf7d9fecd50b5935e54106014257a94e6 # v6.4.0
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/enforce-license-compliance.yml
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ jobs:
uses: actions/setup-java@b843ebf9b913146b38da2eaa7aeddf76074ae1ad # v6.1.0
with:
distribution: 'temurin'
java-version: '17'
java-version: '21'

- name: Checkout
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/format-code.yml
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ jobs:
uses: actions/setup-java@b843ebf9b913146b38da2eaa7aeddf76074ae1ad # v6.1.0
with:
distribution: 'temurin'
java-version: '17'
java-version: '21'

- name: Setup Gradle
uses: gradle/actions/setup-gradle@3f5f9adaf7d9fecd50b5935e54106014257a94e6 # v6.4.0
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/generate-javadocs.yml
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ jobs:
uses: actions/setup-java@b843ebf9b913146b38da2eaa7aeddf76074ae1ad # v6.1.0
with:
distribution: 'temurin'
java-version: '17'
java-version: '21'

- name: Setup Gradle
uses: gradle/actions/setup-gradle@3f5f9adaf7d9fecd50b5935e54106014257a94e6 # v6.4.0
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/integration-tests-macrobenchmark.yml
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ jobs:
uses: actions/setup-java@b843ebf9b913146b38da2eaa7aeddf76074ae1ad # v6.1.0
with:
distribution: 'temurin'
java-version: '17'
java-version: '21'

- name: Setup Gradle
uses: gradle/actions/setup-gradle@3f5f9adaf7d9fecd50b5935e54106014257a94e6 # v6.4.0
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/integration-tests-size.yml
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ jobs:
uses: actions/setup-java@b843ebf9b913146b38da2eaa7aeddf76074ae1ad # v6.1.0
with:
distribution: "temurin"
java-version: "17"
java-version: "21"

# Workaround for https://github.com/gradle/actions/issues/21 to use config cache
- name: Cache buildSrc
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/integration-tests-ui-critical.yml
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ jobs:
uses: actions/setup-java@b843ebf9b913146b38da2eaa7aeddf76074ae1ad # v6.1.0
with:
distribution: 'temurin'
java-version: '17'
java-version: '21'

- name: Setup Gradle
uses: gradle/actions/setup-gradle@3f5f9adaf7d9fecd50b5935e54106014257a94e6 # v6.4.0
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/integration-tests-ui.yml
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ jobs:
uses: actions/setup-java@b843ebf9b913146b38da2eaa7aeddf76074ae1ad # v6.1.0
with:
distribution: 'temurin'
java-version: '17'
java-version: '21'

- name: Setup Gradle
uses: gradle/actions/setup-gradle@3f5f9adaf7d9fecd50b5935e54106014257a94e6 # v6.4.0
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/release-build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ jobs:
uses: actions/setup-java@b843ebf9b913146b38da2eaa7aeddf76074ae1ad # v6.1.0
with:
distribution: 'temurin'
java-version: '17'
java-version: '21'

- name: Setup Gradle
uses: gradle/actions/setup-gradle@3f5f9adaf7d9fecd50b5935e54106014257a94e6 # v6.4.0
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/spring-boot-2-matrix.yml
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ jobs:
uses: actions/setup-java@b843ebf9b913146b38da2eaa7aeddf76074ae1ad # v6.1.0
with:
distribution: 'temurin'
java-version: '17'
java-version: '21'

# Workaround for https://github.com/gradle/actions/issues/21 to use config cache
- name: Cache buildSrc
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/spring-boot-3-matrix.yml
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ jobs:
uses: actions/setup-java@b843ebf9b913146b38da2eaa7aeddf76074ae1ad # v6.1.0
with:
distribution: 'temurin'
java-version: '17'
java-version: '21'

# Workaround for https://github.com/gradle/actions/issues/21 to use config cache
- name: Cache buildSrc
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/spring-boot-4-matrix.yml
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ jobs:
uses: actions/setup-java@b843ebf9b913146b38da2eaa7aeddf76074ae1ad # v6.1.0
with:
distribution: 'temurin'
java-version: '17'
java-version: '21'

# Workaround for https://github.com/gradle/actions/issues/21 to use config cache
- name: Cache buildSrc
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/system-tests-backend.yml
Original file line number Diff line number Diff line change
Expand Up @@ -121,7 +121,7 @@ jobs:
uses: actions/setup-java@b843ebf9b913146b38da2eaa7aeddf76074ae1ad # v6.1.0
with:
distribution: 'temurin'
java-version: '17'
java-version: '21'

- name: Setup Gradle
uses: gradle/actions/setup-gradle@3f5f9adaf7d9fecd50b5935e54106014257a94e6 # v6.4.0
Expand Down
4 changes: 3 additions & 1 deletion CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,9 @@ We suggest opening an issue to discuss bigger changes before investing on a big

# Requirements

The project requires you to run JDK 17.
The project requires you to run JDK 21 or newer. Compilation and tests always happen on JDK 21
through a [toolchain](https://docs.gradle.org/current/userguide/toolchains.html), so a newer JDK
runs the build but never changes its output.

## Android

Expand Down
6 changes: 6 additions & 0 deletions build-logic/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,16 @@ plugins {
dependencies {
implementation(libs.animalsniffer.gradle.plugin)
implementation(libs.spotlessLib)
compileOnly(libs.kotlin.gradle.plugin)
compileOnly(libs.android.gradle.plugin)
}

gradlePlugin {
plugins {
register("sentryJdkTarget") {
id = "io.sentry.jdk-target"
implementationClass = "io.sentry.gradle.JdkTargetConvention"
}
register("sentryAnimalSniffer") {
id = "io.sentry.animalsniffer"
implementationClass = "io.sentry.gradle.SentryAnimalSnifferPlugin"
Expand Down
2 changes: 2 additions & 0 deletions build-logic/settings.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,8 @@ dependencyResolutionManagement {
repositories {
mavenCentral()
gradlePluginPortal()
// AGP is only published to Google's repository.
google()
}
versionCatalogs {
create("libs") {
Expand Down
107 changes: 107 additions & 0 deletions build-logic/src/main/kotlin/io/sentry/gradle/JdkTargetConvention.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,107 @@
package io.sentry.gradle

import com.android.build.gradle.BaseExtension
import org.gradle.api.JavaVersion
import org.gradle.api.Plugin
import org.gradle.api.Project
import org.gradle.api.artifacts.VersionCatalogsExtension
import org.gradle.api.plugins.JavaBasePlugin
import org.gradle.api.plugins.JavaPluginExtension
import org.gradle.api.tasks.compile.JavaCompile
import org.gradle.jvm.toolchain.JavaLanguageVersion
import org.jetbrains.kotlin.gradle.dsl.JvmTarget
import org.jetbrains.kotlin.gradle.dsl.KotlinAndroidProjectExtension
import org.jetbrains.kotlin.gradle.tasks.KotlinJvmCompile

/** The JDK every module compiles and tests with, whatever JDK runs Gradle. */
private val BUILD_JDK = JavaLanguageVersion.of(21)

/** The level the SDK publishes, so that Java 8 consumers can still use it. */
private val PUBLISHED_JAVA_VERSION = JavaVersion.VERSION_1_8

/**
* Holds every toolchain, bytecode level decision and compilation option of a module. It does the
* following
* - sample apps target the build JDK (21)
* - unit test code will target the build JDK (21) (required for Mockito 5)
* - published JVM modules main code pins the Java 1.8 release, for Java and for Kotlin
* - published Android modules main code targets Java 1.8
* - minSdk is set for Android libraries
*/
class JdkTargetConvention : Plugin<Project> {
override fun apply(project: Project) {
project.plugins.withType(JavaBasePlugin::class.java) {
project.extensions.getByType(JavaPluginExtension::class.java).toolchain {
languageVersion.set(BUILD_JDK)
}
}

project.plugins.withId("com.vanniktech.maven.publish") {

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

i was going to ask why this line exists but then i saw your other comment.

i think this is fragile since it relies on precise task namings. i don't think this would match compileReleaseJava for example meaning that these tasks are not set properly: https://scans.gradle.com/s/mom72s36qrefi/timeline?name=compileReleaseJava

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fully agree it's fragile! This block is for pure JVM modules, where there's only "compileJava", and no variants. Once all our published modules target JDK 11, hopefully most of the code within this plugin can be greatly simplified.

// Only works for non-android modules
// See https://issuetracker.google.com/issues/278800528
project.plugins.withId("java-library") {
project.tasks.named("compileJava", JavaCompile::class.java) {
options.release.set(PUBLISHED_JAVA_VERSION.majorVersion.toInt())
}
}
// -Xjdk-release is the Kotlin counterpart of release: without it Kotlin resolves against the
// build JDK and happily compiles e.g. Files.readString() into Java 8 bytecode. The version
// follows jvmTarget, which the modules that publish a higher level set themselves.
project.plugins.withId("org.jetbrains.kotlin.jvm") {
project.tasks.named("compileKotlin", KotlinJvmCompile::class.java) {
compilerOptions.freeCompilerArgs.add(

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

something seems wrong about this. let's jump on a call if this doesn't make sense.
I would expect that we need to set the jvmTarget to 1.8 like we do in all of our modules.
search the codebase for: kotlin { compilerOptions.jvmTarget = JVM_1_8 }

that means that we need to do the same here.
the freeCompilerArgs should be set to -Xjdk-release=${it.target} not the jvmTarget

compilerOptions.jvmTarget.map { "-Xjdk-release=${it.target}" }
)
}
}
}
Comment thread
cursor[bot] marked this conversation as resolved.

project.plugins.withId("com.android.library") {
val android = project.extensions.getByType(BaseExtension::class.java)
Comment thread
markushi marked this conversation as resolved.
android.compileOptions {
sourceCompatibility = PUBLISHED_JAVA_VERSION
targetCompatibility = PUBLISHED_JAVA_VERSION
}
android.defaultConfig { aarMetadata { minCompileSdk = project.minSdk() } }
}

listOf("com.android.library", "com.android.application").forEach { pluginId ->
project.plugins.withId(pluginId) { project.targetBuildJdkForUnitTests() }
}
}

private fun Project.minSdk(): Int =
Comment thread
markushi marked this conversation as resolved.
extensions
.getByType(VersionCatalogsExtension::class.java)
.named("libs")
.findVersion("minSdk")
.orElseThrow { IllegalStateException("libs.versions.minSdk is missing") }
.requiredVersion
.toInt()

/**
* Mockito 5 and mockito-kotlin 6 are built for Java 11, so test code - which is never published -
* cannot share the Java 8 target of the main code. AGP has no per variant compileOptions, so this
* goes through the Kotlin compilations: their compile task providers are configured after AGP
* wrote its own compileOptions, which an apply time configureEach would lose against.
*/
private fun Project.targetBuildJdkForUnitTests() {
plugins.withId("org.jetbrains.kotlin.android") {
extensions
.getByType(KotlinAndroidProjectExtension::class.java)
.target
.compilations
.configureEach {
if (name.endsWith("UnitTest")) {
compileTaskProvider.configure {
compilerOptions.jvmTarget.set(JvmTarget.fromTarget(BUILD_JDK.toString()))
}
compileJavaTaskProvider?.configure {
sourceCompatibility = BUILD_JDK.toString()
targetCompatibility = BUILD_JDK.toString()
}
}
}
}
}
}
27 changes: 5 additions & 22 deletions build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,10 @@ plugins {
alias(libs.plugins.sentry) apply false
Comment thread
sentry-warden[bot] marked this conversation as resolved.
}

check(JavaVersion.current().isCompatibleWith(JavaVersion.VERSION_21)) {
"This build requires JDK 21 or newer, but runs on JDK ${JavaVersion.current()}."
}

buildscript {
repositories {
google()
Expand Down Expand Up @@ -111,6 +115,7 @@ allprojects {

subprojects {
apply { plugin("io.sentry.spotless") }
apply { plugin("io.sentry.jdk-target") }

plugins.withId(Config.QualityPlugins.detektPlugin) {
configure<DetektExtension> {
Expand Down Expand Up @@ -162,28 +167,6 @@ subprojects {

configure<JavaPluginExtension> {
withJavadocJar()

sourceCompatibility = JavaVersion.VERSION_1_8
targetCompatibility = JavaVersion.VERSION_1_8
}
}

// AGP 9 defaults Android modules to Java 11. Pin the published library modules back
// to Java 8 so their bytecode stays consumable by Java 8 projects, mirroring the
// java-library pin above.
plugins.withId("com.android.library") {
configure<com.android.build.gradle.BaseExtension> {
compileOptions {
sourceCompatibility = JavaVersion.VERSION_1_8
targetCompatibility = JavaVersion.VERSION_1_8
}

// AGP 9 defaults the AAR metadata minCompileSdk to the library's compileSdk,
// which would force every consumer onto that compile SDK. Pin it to our minSdk
// so consumers remain free to compile against any SDK we support, as before.
defaultConfig {
aarMetadata { minCompileSdk = libs.versions.minSdk.get().toInt() }
}
}
}

Expand Down
6 changes: 0 additions & 6 deletions buildSrc/build.gradle.kts
Original file line number Diff line number Diff line change
@@ -1,9 +1,3 @@
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile

plugins {
`kotlin-dsl`
}

tasks.withType<KotlinCompile>().configureEach {
Comment thread
markushi marked this conversation as resolved.
compilerOptions.jvmTarget = org.jetbrains.kotlin.gradle.dsl.JvmTarget.JVM_17
}
16 changes: 10 additions & 6 deletions gradle/libs.versions.toml
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,9 @@ retrofit = "2.9.0"
room2 = "2.8.4"
room3 = "3.0.0-rc01"
sagp = "6.13.0"
# Compile-time only, for the AGP types the build-logic convention plugins use. The AGP that
# actually runs the build comes from the root buildscript (Config.AGP, overridable via VERSION_AGP).
agp = "9.4.0"
sqlite = "2.6.2"
sqliteRc = "2.7.0-rc01" # Required by Room3 3.0.0-rc*
slf4j = "1.7.30"
Expand All @@ -64,7 +67,7 @@ buildconfig = { id = "com.github.gmazzo.buildconfig", version = "5.6.5" }
dokka = { id = "org.jetbrains.dokka", version = "2.0.0" }
dokka-javadoc = { id = "org.jetbrains.dokka-javadoc", version = "2.0.0" }
binary-compatibility-validator = { id = "org.jetbrains.kotlinx.binary-compatibility-validator", version = "0.13.0" }
errorprone = { id = "net.ltgt.errorprone", version = "3.0.1" }
errorprone = { id = "net.ltgt.errorprone", version = "5.1.1" }
Comment thread
markushi marked this conversation as resolved.
gradle-versions = { id = "com.github.ben-manes.versions", version = "0.42.0" }
spotless = { id = "com.diffplug.spotless", version.ref = "spotless" }
detekt = { id = "io.gitlab.arturbosch.detekt", version = "1.23.8" }
Expand Down Expand Up @@ -129,7 +132,7 @@ caffeine-jcache = { module = "com.github.ben-manes.caffeine:jcache", version = "
coil-compose = { module = "io.coil-kt:coil-compose", version = "2.6.0" }
commons-compress = {module = "org.apache.commons:commons-compress", version = "1.28.0"}
context-propagation = { module = "io.micrometer:context-propagation", version = "1.1.0" }
errorprone-core = { module = "com.google.errorprone:error_prone_core", version = "2.11.0" }
errorprone-core = { module = "com.google.errorprone:error_prone_core", version = "2.50.0" }
feign-core = { module = "io.github.openfeign:feign-core", version.ref = "feign" }
feign-gson = { module = "io.github.openfeign:feign-gson", version.ref = "feign" }
graphql-java17 = { module = "com.graphql-java:graphql-java", version = "17.3" }
Expand All @@ -152,9 +155,11 @@ log4j-core = { module = "org.apache.logging.log4j:log4j-core", version.ref = "lo
leakcanary = { module = "com.squareup.leakcanary:leakcanary-android", version = "2.14" }
lottie-compose = { module = "com.airbnb.android:lottie-compose", version = "6.7.1" }
logback-classic = { module = "ch.qos.logback:logback-classic", version.ref = "logback" }
kotlin-gradle-plugin = { module = "org.jetbrains.kotlin:kotlin-gradle-plugin", version.ref = "kotlin" }
android-gradle-plugin = { module = "com.android.tools.build:gradle", version.ref = "agp" }
nopen-annotations = { module = "com.jakewharton.nopen:nopen-annotations", version.ref = "nopen" }
nopen-checker = { module = "com.jakewharton.nopen:nopen-checker", version.ref = "nopen" }
nullaway = { module = "com.uber.nullaway:nullaway", version = "0.9.5" }
nullaway = { module = "com.uber.nullaway:nullaway", version = "0.14.2" }
Comment thread
markushi marked this conversation as resolved.
okhttp = { module = "com.squareup.okhttp3:okhttp", version.ref = "okhttp" }
okhttp-bom = { module = "com.squareup.okhttp3:okhttp-bom", version.ref = "okhttp" }
openfeature = { module = "dev.openfeature:sdk", version.ref = "openfeature" }
Expand Down Expand Up @@ -273,9 +278,8 @@ hsqldb = { module = "org.hsqldb:hsqldb", version = "2.6.1" }
javafaker = { module = "com.github.javafaker:javafaker", version = "1.0.2" }
kotlinx-coroutines-test = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-test", version.ref = "coroutines" }
leakcanary-instrumentation = { module = "com.squareup.leakcanary:leakcanary-android-instrumentation", version = "2.14" }
mockito-kotlin = { module = "org.mockito.kotlin:mockito-kotlin", version = "4.1.0" }
mockito-kotlin-spring7 = { module = "org.mockito.kotlin:mockito-kotlin", version = "6.0.0" }
mockito-inline = { module = "org.mockito:mockito-inline", version = "4.8.0" }
mockito-kotlin = { module = "org.mockito.kotlin:mockito-kotlin", version = "6.4.0" }
mockito-core = { module = "org.mockito:mockito-core", version = "5.24.0" }
msgpack = { module = "org.msgpack:msgpack-core", version = "0.9.8" }
okhttp-mockwebserver = { module = "com.squareup.okhttp3:mockwebserver", version.ref = "okhttp" }
# apollo-runtime 5.x pulls in okhttp 5.x; mockwebserver 4.x is incompatible with that classpath
Expand Down
Loading
Loading