Gradle 5.0: cómo corregir las funciones obsoletas y actualizar un proyecto Kotlin

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

¿Por qué Gradle grita "Deprecated features" y qué hacer al respecto?

\n\n

¿Alguna vez ha ejecutado la compilación de un proyecto Kotlin y ha visto el mensaje aterrador: Deprecated Gradle features were used in this build, making it incompatible with Gradle 5.0? Si es así, no está solo. Esta pregunta ha acumulado miles de visitas en Stack Overflow, y hoy la analizaremos en detalle.

\n\n

Imagínese: escribe en Kotlin, todo funciona, pero Gradle de repente se vuelve caprichoso. Dice: "Oye, estás usando funciones antiguas que eliminaré en la versión 5.0". Es como si su máquina de café favorita le dijera que mañana dejará de aceptar tazas viejas. Es molesto, pero tiene solución.

\n\n

En este artículo, no solo mostraremos cómo eliminar el error. Compararemos tres enfoques de solución: desde el rápido "parche" hasta la refactorización profesional. Descubrirá por qué Gradle considera su código obsoleto y cómo reescribirlo de manera moderna.

\n\n

¿Qué son las funciones obsoletas en Gradle?

\n\n

Las funciones obsoletas son aquellas partes de la API que los desarrolladores de Gradle planean eliminar en el futuro. Se mantienen por compatibilidad inversa, pero ya no se recomienda usarlas. Cuando ve esta advertencia, Gradle literalmente dice: "Tu proyecto se compilará ahora, pero después de actualizar a la versión 5.0, no".

\n\n

La mayoría de las veces, el problema radica en:

\n
    \n
  • Plugins obsoletos (por ejemplo, versiones antiguas de kotlin-gradle-plugin)
  • \n
  • Dependencias implícitas (usar compile en lugar de implementation)
  • \n
  • Scripts en Groovy que no están adaptados a Kotlin DSL
  • \n
  • Llamadas directas a métodos obsoletos en build.gradle
  • \n
\n\n

Enfoque 1: Solución rápida: suprimir las advertencias

\n\n

La forma más sencilla (pero no la más correcta) es simplemente decirle a Gradle: "Cállate y trabaja". Es como tapar la luz de Check Engine con cinta adhesiva. El coche funcionará, pero los problemas persistirán.

\n\n

Agregue el siguiente bloque en build.gradle.kts (Kotlin DSL):

\n\n
tasks.withType<Wrapper> {\n    gradleVersion = "4.10.3" // congelar la versión\n}\n\n// O suprimir la advertencia\nallprojects {\n    tasks.withType<AbstractCompile> {\n        options.isDeprecation = false\n    }\n}
\n\n

Ventajas: rápido, no requiere cambios de código, la compilación se realiza.

\n

Desventajas: no resuelve el problema, solo lo pospone. Al migrar a Gradle 5.0+, el proyecto se romperá. Además, se pierden importantes mejoras de rendimiento y seguridad.

\n\n

Cuándo usarlo: solo si necesita compilar el proyecto urgentemente y no hay tiempo para refactorizar. Pero asegúrese de planificar una solución adecuada.

\n\n

Enfoque 2: Migración a configuraciones modernas

\n\n

Este es el "término medio". No solo tapa el error, sino que pone el proyecto en orden. Analicemos los problemas típicos con un ejemplo de proyecto Kotlin.

\n\n

Reemplazar compile por implementation/api

\n\n

La forma antigua de declarar dependencias, compile, quedó obsoleta en Gradle 3.0. En su lugar, use implementation y api.

\n\n

Antes (Groovy):

\n
dependencies {\n    compile 'org.jetbrains.kotlin:kotlin-stdlib:1.3.72'\n    compile 'com.squareup.retrofit2:retrofit:2.9.0'\n}
\n\n

Ahora (Kotlin DSL):

\n
dependencies {\n    implementation("org.jetbrains.kotlin:kotlin-stdlib:1.9.0")\n    implementation("com.squareup.retrofit2:retrofit:2.9.0")\n}
\n\n

La diferencia es simple: implementation oculta la dependencia de los consumidores del módulo, acelerando la compilación. api la hace visible, como el antiguo compile.

\n\n

Actualizar el plugin de Kotlin

\n\n

Las versiones antiguas de kotlin-gradle-plugin suelen usar API obsoletas de Gradle. Verifique la versión actual en kotlinlang.org y act

Blogs

Book Recommendations