Plugin e biblioteca Kotlin: falso alarme de versões

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Introdução: O familiar triângulo amarelo

Você já viu este aviso no IntelliJ IDEA ou ao compilar com Gradle? Ele aparece, você verifica o build.gradle.kts — e vê que as versões coincidem. Mas a IDE insiste em destacar com um triângulo amarelo: "Kotlin plugin version is not the same as library version". Familiar?

Este é um dos problemas mais populares no Stack Overflow (milhares de visualizações!). Parece que o sistema enlouqueceu. Mas, na verdade, existe uma razão técnica bem específica por trás disso. Neste artigo, não vamos apenas remover o incômodo aviso, mas também entender como ele afeta a otimização e o desempenho do seu projeto Kotlin.



Essência do problema: Por que o aviso aparece se as versões coincidem?

Vamos analisar a anatomia do erro. Você escreve no build.gradle.kts:

plugins {    kotlin("jvm") version "1.9.22" apply false}

// Na seção dependencies:implementation(kotlin("stdlib", "1.9.22"))

Parece tudo correto. Mas o Gradle vê dois artefatos diferentes:

  • Kotlin Gradle Plugin — versão 1.9.22 (gerencia a compilação)
  • Kotlin Stdlib — versão 1.9.22 (biblioteca de tempo de execução)

O problema é que o Gradle pode puxar uma dependência transitiva com uma versão diferente do Kotlin. Por exemplo, se o seu projeto usa a biblioteca Fuel ou Ktor, elas podem trazer consigo o kotlin-stdlib:1.8.0. Como resultado, o classpath acaba tendo duas versões diferentes da mesma biblioteca.

A IDE vê o conflito de versões entre o plugin (1.9.22) e uma das bibliotecas (1.8.0) — e emite o aviso. Enquanto isso, sua dependência explícita kotlin("stdlib", "1.9.22") pode ser sobrescrita pela transitiva.



Diagnóstico: Como encontrar o culpado?

Antes de tratar, é preciso entender de onde vem a versão antiga. Use as ferramentas integradas do Gradle.



Método 1: Tarefa Gradle dependencies

Execute no terminal:

./gradlew dependencies --configuration runtimeClasspath

Na saída, procure linhas contendo kotlin-stdlib. Você verá algo como:

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

A seta -> mostra que o Gradle resolveu o conflito a favor da versão 1.9.22. Mas o aviso ainda pode persistir se o plugin analisar as versões originais.



Método 2: IntelliJ IDEA — Module Settings

Abra File → Project Structure → Modules. Selecione seu módulo e veja a aba Dependencies. Lá são exibidas todas as dependências, incluindo as transitivas. Se você vir kotlin-stdlib:1.8.0 (ou outra versão) — essa é a fonte do problema.



4 formas de corrigir o aviso (e melhorar o desempenho)

Agora vamos ao que interessa — as soluções. Cada método afeta a otimização do build e o desempenho em tempo de execução.



Método 1: Alinhamento forçado de versões (Alignment)

A abordagem mais correta é usar o Kotlin BOM (Bill of Materials). Isso garante que todas as dependências Kotlin terão a mesma versão.

// build.gradle.ktsdependencies {    implementation(platform("org.jetbrains.kotlin:kotlin-bom:1.9.22"))    implementation("org.jetbrains.kotlin:kotlin-stdlib")    // Agora não precisa especificar a versão — ela vem do BOM}

Por que isso é bom para o desempenho? O BOM elimina a duplicação de classes no classpath. Se você tem duas versões do kotlin-stdlib

Blogs

Book Recommendations