Plugin y biblioteca de Kotlin: falsa alarma de versiones

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Introducción: El familiar triángulo amarillo

\n

¿Alguna vez has visto esta advertencia en IntelliJ IDEA o al compilar con Gradle? Aparece, revisas tu build.gradle.kts — y ves que las versiones coinciden. Pero el IDE insiste en resaltar con un triángulo amarillo: "Kotlin plugin version is not the same as library version". ¿Te suena?

\n

Este es uno de los problemas más populares en Stack Overflow (¡miles de visitas!). Parece que el sistema se ha vuelto loco. Pero en realidad, hay una razón técnica muy concreta detrás. En este artículo no solo eliminaremos la molesta advertencia, sino que también entenderemos cómo afecta a la optimización y el rendimiento de tu proyecto Kotlin.

\n\n

El núcleo del problema: ¿Por qué aparece la advertencia si las versiones coinciden?

\n

Analicemos la anatomía del error. Escribes en build.gradle.kts:

\n
plugins {\n    kotlin("jvm") version "1.9.22" apply false\n}\n\n// En la sección dependencies:\nimplementation(kotlin("stdlib", "1.9.22"))\n
\n

En apariencia, todo es correcto. Pero Gradle ve dos artefactos diferentes:

\n
    \n
  • Kotlin Gradle Plugin — versión 1.9.22 (gestiona la compilación)
  • \n
  • Kotlin Stdlib — versión 1.9.22 (biblioteca de tiempo de ejecución)
  • \n
\n

El problema es que Gradle puede arrastrar una dependencia transitiva con otra versión de Kotlin. Por ejemplo, si tu proyecto usa la biblioteca Fuel o Ktor, estas pueden traer consigo kotlin-stdlib:1.8.0. Como resultado, en el classpath aparecen dos versiones diferentes de la misma biblioteca.

\n

El IDE detecta un conflicto de versiones entre el plugin (1.9.22) y una de las bibliotecas (1.8.0) — y muestra la advertencia. Mientras tanto, tu dependencia explícita kotlin("stdlib", "1.9.22") puede ser sobrescrita por la transitiva.

\n\n

Diagnóstico: ¿Cómo encontrar al culpable?

\n

Antes de tratar, debemos entender de dónde viene la versión antigua. Usa las herramientas integradas de Gradle.

\n\n

Método 1: Tarea dependencies de Gradle

\n

Ejecuta en la terminal:

\n
./gradlew dependencies --configuration runtimeClasspath
\n

En la salida, busca las líneas que contengan kotlin-stdlib. Verás algo como:

\n
+--- org.jetbrains.kotlin:kotlin-stdlib:1.9.22\n|    \\--- org.jetbrains.kotlin:kotlin-stdlib-common:1.9.22\n+--- com.example:some-library:2.0.0\n|    \\--- org.jetbrains.kotlin:kotlin-stdlib:1.8.0 -> 1.9.22\n
\n

La flecha -> indica que Gradle resolvió el conflicto a favor de la versión 1.9.22. Pero la advertencia puede persistir si el plugin analiza las versiones originales.

\n\n

Método 2: IntelliJ IDEA — Module Settings

\n

Abre File → Project Structure → Modules. Selecciona tu módulo y revisa la pestaña Dependencies. Allí se muestran todas las dependencias, incluidas las transitivas. Si ves kotlin-stdlib:1.8.0 (u otra versión) — esa es la fuente del problema.

\n\n

4 formas de corregir la advertencia (y mejorar el rendimiento)

\n

Ahora pasemos a lo más interesante: las soluciones. Cada método afecta la optimización de la compilación y el rendimiento en tiempo de ejecución.

\n\n

Método 1: Alineación forzada de versiones (Alignment)

\n

El enfoque más correcto es usar Kotlin BOM (Bill of Materials). Esto garantiza que todas las dependencias de Kotlin tengan la misma versión.

\n
// build.gradle.kts\ndependencies {\n    implementation(platform("org.jetbrains.kotlin:kotlin-bom:1.9.22"))\n    implementation("org.jetbrains.kotlin:kotlin-stdlib")\n    // Ahora no es necesario especificar la versión — se toma del BOM\n}\n
\n

¿Por qué es bueno para el rendimiento? El BOM elimina la duplicación de clases en el classpath. Si tienes dos versiones de kotlin-stdlib

Blogs

Book Recommendations