Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

336
Vistas
¿Por qué Kotlin JDK8 también incluye Kotlin JDK7 en el classpath?

Estoy usando Kotlin para crear un servicio web y me topé con lo que considero una extraña curiosidad. Con este build.gradle:

 group 'com.example' version '0.1.0' buildscript { ext.kotlinVersion = '1.2.71' repositories { mavenCentral() } dependencies { classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlinVersion" } } apply plugin: 'kotlin' sourceCompatibility = 1.8 repositories { mavenCentral() } dependencies { compile "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlinVersion" compile 'com.fasterxml.jackson.module:jackson-module-kotlin:2.9.8' } compileKotlin { kotlinOptions.jvmTarget = "1.8" } compileTestKotlin { kotlinOptions.jvmTarget = "1.8" }

Me sale este error durante la compilación:

 w: Runtime JAR files in the classpath should have the same version. These files were found in the classpath: .../kotlin-stdlib-jdk8-1.2.71.jar (version 1.2) .../kotlin-stdlib-jdk7-1.2.71.jar (version 1.2) .../kotlin-reflect-1.3.10.jar (version 1.3) .../kotlin-stdlib-1.3.10.jar (version 1.3) .../kotlin-stdlib-common-1.3.10.jar (version 1.3)

Bien, no hay problema, jackson-module-kotlin está incorporando las dependencias de kotlin 1.3. Puedo excluirlos. Pero lo que me llamó la atención fue la segunda línea. kotlin-stdlib-jdk8 también está kotlin-stdlib-jdk7 . De hecho, puedo excluirlo y todo sigue funcionando como se esperaba:

 compile("org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlinVersion") { exclude group: "org.jetbrains.kotlin", module: "kotlin-stdlib-jdk7" }

¿Por qué kotlin-stdlib-jdk8 está introduciendo en mi classpath el kotlin-stdlib-jdk7 aparentemente innecesario?

over 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

La advertencia que ve durante la compilación ocurre porque la dependencia jackson-module-kotlin:2.9.8 aparentemente trae kotlin-stdlib:1.3.10 al classpath y esa versión anula su dependencia declarada en 1.2.71. Para evitar advertencias, debe migrar su proyecto a Kotlin 1.3.x o degradar la dependencia de jackson-module-kotlin a alguna versión anterior que dependa de Kotlin 1.2.x.

kotlin-stdlib-jdk8 es una adición sobre kotlin-stdlib-jdk7 , y la última es una adición sobre kotlin-stdlib . No debe excluir estas dependencias transitivas, de lo contrario, podría obtener errores de tiempo de ejecución.

over 4 years ago · Santiago Trujillo Denunciar

0

El kotlin-stdlib-common , kotlin-stdlib-jdk7 y kotlin-stdlib-jdk8 parecen ser mutuamente excluyentes por lo que pude ver dentro de los frascos. Es por eso que necesita el artefacto jdk7 incluso si usa jdk8.

El kotlin-stdlib-jdk7 solo contiene cosas que se agregaron en JDK7 como AutoCloseable y otras API internas. Esto no está incluido en el artefacto JDK8, que solo incluye elementos agregados en JDK8.

Si no usa las funciones globales use o closeFinally , su código debería funcionar bien sin el artefacto jdk7, pero no hay una razón real para excluir este jar en mi humilde opinión.

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda