-
Notifications
You must be signed in to change notification settings - Fork 932
Description
Describe the bug
In PR #7517, @jkwatson changed the dependency to OkHttp from okhttp to okhttp-jvm in an attempt to fix #7491. However, this breaks OkHttp dependency resolution when OpenTelemetry is used on Android. On Android, okhttp-android should be used. As OkHttp is a Kotlin Multiplatform project, it has an artifact okhttp that resolves to okhttp-android for Android projects and to okhttp-jvm for standard JVM projects. See here: https://github.com/square/okhttp?tab=readme-ov-file#maven-and-jvm-projects
As OpenTelemetry now hardcodes the dependency to okhttp-jvm, we end up with the wrong artifact in our Android project. Worse yet: As we have other dependencies that depend on okhttp-android, we have both artifacts in our classpath, which breaks the build:
Execution failed for task ':app:checkDebugDuplicateClasses'.
> A failure occurred while executing com.android.build.gradle.internal.tasks.CheckDuplicatesRunnable
> Duplicate class okhttp3.Address found in modules okhttp-jvm-5.1.0.jar -> okhttp-jvm-5.1.0 (com.squareup.okhttp3:okhttp-jvm:5.1.0) and okhttp-release.aar -> okhttp-release-runtime (com.squareup.okhttp3:okhttp-android:5.1.0)
Duplicate class okhttp3.Authenticator found in modules okhttp-jvm-5.1.0.jar -> okhttp-jvm-5.1.0 (com.squareup.okhttp3:okhttp-jvm:5.1.0) and okhttp-release.aar -> okhttp-release-runtime (com.squareup.okhttp3:okhttp-android:5.1.0)
Steps to reproduce
- Set up any Android project
- Add a dependency to
okhttpas defined here: https://github.com/square/okhttp?tab=readme-ov-file#releases - Add a dependency to the OpenTelemetry OkHttp sender/exporter
- Try to build the project
What did you expect to see?
Build passes and the OkHttp dependency resolves to okhttp-android.
What did you see instead?
Build fails and OkHttp dependency is okhttp-jvm.
What version and what artifacts are you using?
Artifacts: (e.g., opentelemetry-api, opentelemetry-sdk, which exporters, etc)
Version: 1.53.0
How did you reference these artifacts? (excerpt from your build.gradle, pom.xml, etc)
implementation(platform(libs.opentelemetry.bom))
implementation(libs.opentelemetry.exporter.logging)
implementation(libs.opentelemetry.exporter.otlp)
implementation(libs.opentelemetry.exporter.otlp.common)
implementation(libs.opentelemetry.exporter.logging)[versions]
opentelemetry = "1.53.0"
opentelemetry-instrumentation = "2.20.0-alpha"
[libraries]
opentelemetry-api = { group = "io.opentelemetry", name = "opentelemetry-api", version.ref = "opentelemetry" }
opentelemetry-bom = { group = "io.opentelemetry", name = "opentelemetry-bom", version.ref = "opentelemetry" }
opentelemetry-exporter-logging = { group = "io.opentelemetry", name = "opentelemetry-exporter-logging", version.ref = "opentelemetry" }
opentelemetry-exporter-otlp = { group = "io.opentelemetry", name = "opentelemetry-exporter-otlp", version.ref = "opentelemetry" }
opentelemetry-exporter-otlp-common = { group = "io.opentelemetry", name = "opentelemetry-exporter-otlp-common", version.ref = "opentelemetry" }
opentelemetry-extension-kotlin = { group = "io.opentelemetry", name = "opentelemetry-extension-kotlin", version.ref = "opentelemetry" }
opentelemetry-ktor = { group = "io.opentelemetry.instrumentation", name = "opentelemetry-ktor-2.0", version.ref = "opentelemetry-instrumentation" }
opentelemetry-okhttp3 = { group = "io.opentelemetry.instrumentation", name = "opentelemetry-okhttp-3.0", version.ref = "opentelemetry-instrumentation" }
opentelemetry-sdk = { group = "io.opentelemetry", name = "opentelemetry-sdk", version.ref = "opentelemetry" }Environment
Compiler: (e.g., "Temurin 17.0.7")
Runtime version: 21.0.7+-13880790-b1038.58 aarch64
VM: OpenJDK 64-Bit Server VM by JetBrains s.r.o.
OS: (e.g., "Ubuntu 20.04")
macOS 15.6.1 (24G90)
Runtime (if different from JDK above): (e.g., "Oracle JRE 8u251")
OS (if different from OS compiled on): (e.g., "Windows Server 2019")
Additional context
Add any other context about the problem here.
Tip: React with 👍 to help prioritize this issue. Please use comments to provide useful context, avoiding +1 or me too, to help us triage it. Learn more here.