Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

337
Views
¿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 answers
Answer question

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!