square / square/square-java-sdk

Maven builds get an empty okhttp jar

Abierto
#201 0 comentarios 0 reacciones 0 asignados Ver en GitHub

Nadie ha tomado este issue todavía.

Lenguaje dominante
Java
Estrellas
70
Forks
37
Merge medio
2 h 7 min
PR fusionados (30 d)
1

Descripción

Using

<dependency>
    <groupId>com.squareup</groupId>
    <artifactId>square</artifactId>
    <version>47.0.1.20260715</version>
    <scope>compile</scope>
</dependency>

The resulting jar gets an empty okhttp jar. We now need to add

<dependency>
    <groupId>com.squareup.okhttp3</groupId>
    <artifactId>okhttp-jvm</artifactId>
    <version>5.2.1</version>
</dependency>

for the build to work.

Some additional detail on the failure and root cause:

Symptom — any Maven-built app using SDK 47.x fails at runtime the first time a client is built:

  java.lang.ClassNotFoundException: okhttp3.Interceptor
      at com.squareup.square.core.ClientOptions.builder(ClientOptions.java:102)
      at com.squareup.square.SquareClientBuilder.buildClientOptions(SquareClientBuilder.java:104)
      at com.squareup.square.SquareClientBuilder.build(SquareClientBuilder.java:255)

Root cause — the SDK depends on com.squareup.okhttp3:okhttp 5.x, which is published as a Kotlin Multiplatform artifact. The root okhttp jar on Maven Central contains no classes (just META-INF/kotlin-project-structure-metadata.json); the real JVM classes live in okhttp-jvm.
Gradle resolves the redirect via Gradle Module Metadata, but Maven ignores .module files, so Maven consumers silently get the empty jar.
Per the OkHttp README (https://github.com/square/okhttp#requirements), "Maven projects must select between okhttp-jvm and okhttp-android" — see also square/okhttp#8913.

Suggested fix — declare com.squareup.okhttp3:okhttp-jvm in the SDK's published POM so the correct artifact flows transitively to Maven consumers. This is how OpenTelemetry resolved the identical breakage (open-telemetry/opentelemetry-java#7491), and it matches what okio itself does: okio's root POM declares okio-jvm as a plain compile dependency, which is why okio classes resolve fine under Maven while okhttp's don't.

Guía de contribución

No hay ninguna guía de contribución indexada para este repositorio

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Línea de trabajo

Reproduce el fallo con la declaración de dependencia de Maven del issue e inspecciona el POM publicado y sus dependencias transitivas. Usa el stack trace de ClientOptions.builder como punto de entrada; se considera terminado cuando los consumidores de Maven reciben okhttp-jvm de forma transitiva y dejan de encontrar ClassNotFoundException para okhttp3.Interceptor.

Escrito por el modelo de indexación a partir del texto del issue.

Evaluación

Stack tecnológico
java, kotlin
Área
build-system
Tipo de issue
Error
Dificultad
3/5
Tiempo estimado
1-2 días
Estado de actividad
Tranquilo
Claridad
Bastante claro
Aptitud para principiantes
68/100

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.