¿Cómo configurar la tarea compileJava’ (11) y la tarea ‘compileKotlin’ (1.8) compatibilidad de destino jvm con la misma versión de Java en build.gradle.kts?

4 minutos de lectura

avatar de usuario de jitendra kumar
yitendra kumar

Construir.gradle.kts

buildscript {
    repositories {
        google()
        mavenCentral()
        gradlePluginPortal()
    }
    dependencies {
        classpath ("com.android.tools.build:gradle:7.0.2")
        classpath ("org.jetbrains.kotlin:kotlin-gradle-plugin:1.5.30")
        classpath("gradle.plugin.com.github.spotbugs.snom:spotbugs-gradle-plugin:${Versions.spotbugsGradlePluginVersion}")
        classpath("se.bjurr.violations:violations-gradle-plugin:${Versions.violationsVersion}")

    }
}
//android {
//    compileOptions {
//        sourceCompatibility = JavaVersion.VERSION_11
//                targetCompatibility = JavaVersion.VERSION_11
//    }
//
//    kotlinOptions {
//        jvmTarget = JavaVersion.VERSION_11.toString()
//    }
//}
plugins {
    `maven-publish`
    `java-gradle-plugin`
    `kotlin-dsl`
    id ("io.gitlab.arturbosch.detekt") version ("1.18.1")
}
repositories {
    google()
    mavenCentral()
    gradlePluginPortal()
}

dependencies {
    compileOnly(gradleApi())
    testImplementation(gradleTestKit())
    testImplementation("junit:junit:${Versions.jUnitVersion}")
}
val generatedSources = tasks.register<GenerateVersionsFileTask>("generateSources")

ERROR: la tarea ‘compileJava’ (el objetivo actual es 11) y la tarea ‘compileKotlin’ (el objetivo actual es 1.8) la compatibilidad del objetivo jvm debe establecerse en la misma versión de Java.

Cuando elimino el comentario de Android {} Error: Errores de compilación del script:

 Line 15: android {
           ^ Unresolved reference: android

Gracias por su tiempo y esfuerzo 🙂 Jitendra

  • Tenga en cuenta que si no tiene ninguna fuente de Java (solo fuentes de Kotlin), este mensaje en realidad no debería aparecer en absoluto, consulte también youtrack.jetbrains.com/issue/KT-48745.

    – sschuberth

    24/09/2021 a las 15:25

  • Creo que el bloque “android” no se resuelve porque no tiene aplicado el complemento “com.android.application” o “com.android.library”

    – Tom Rutchik

    27 abr a las 17:48

Avatar de usuario de Marian
mariano

Puede configurar la versión de Java para Java con

java {
    sourceCompatibility = JavaVersion.VERSION_11
    targetCompatibility = JavaVersion.VERSION_11
}

o alternativamente:

java {
    toolchain.languageVersion.set(JavaLanguageVersion.of(11))
}

y para kotlin con:

tasks.withType<org.jetbrains.kotlin.gradle.tasks.KotlinCompile>().configureEach {
    kotlinOptions {
        jvmTarget = "11"
    }
}

Todas las muestras están en gradle kotlin dsl.

  • Nota: cuando uso su tasks.withType<> como es, me sale Could not get unknown property 'withType' for task set of type org.gradle.api.internal.tasks.DefaultTaskContainer . El error desaparece al usar tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile) {; entonces corchetes en lugar de . Pero desafortunadamente, eso todavía da como resultado la misma advertencia sobre la que preguntó el interrogador ;-(

    – Gato fantasma

    17 de febrero a las 7:43


  • @GhostCat Acabo de encontrarme con esto usando un archivo de compilación antiguo que usó funcionar correctamente (con no ()), después de actualizar el kotlin("jvm") versión. Supuse que era un cambio en la API de Gradle, pero no pude encontrar una forma correcta de hacerlo… luego, en algún momento, volví a colocar esto (se acaba de comentar) e imagínense, funciona. :\ Lo único significativo en el medio fue “invalidar cachés y reiniciar”, porque una versión más nueva de un jar dependiente no se indexaba correctamente. Tú y tus dos garrapatas implican que no estoy loco, aunque supongo que este problema no se reproduce fácilmente…

    – CódigoPayaso42

    28 de mayo a las 15:56


  • Tal vez dependa de las versiones del complemento de Kotlin. Hay varias partes móviles aquí.

    – Gato fantasma

    6 de junio a las 9:17

  • la pregunta era para build.gradle.kts, tasks.withType<T> { ... } es la sintaxis DSL de Kotlin Gradle, tasks.withType(T) { es la sintaxis de Gradle Groovy.

    – TWiStErRob

    16 ago a las 17:36

La respuesta de @ Marian no me ayudó del todo.

Termino configurando lo siguiente en la aplicación build.gradle

Android {
...
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_11
        targetCompatibility JavaVersion.VERSION_11
    }

    kotlinOptions {
        jvmTarget=11
    }
...
}

  • ¿Esto realmente funcionó para ti? ¡Pensé que Android estaba restringido a jvm 1.8!

    – Tom Rutchik

    27 abr a las 17:52

  • Desde Android Gradle Plugin 7.0, se requiere Java 11. Y lo anterior me funciona.

    – LeoXJ

    27 abr a las 18:17

  • Sí, sabía que el complemento Gradle de Android requería Java 11. Ese es el nivel mínimo de JVM necesario para sus compilaciones. Android/compileOption/sourceCompatibiity es el nivel de jvm en el que desea compilar su código de Android, y eso es lo que entiendo que se limita a la versión 1.8. Creo que si usa algunas funciones de Java 11 en su código de Android, creo que se romperá.

    – Tom Rutchik

    28 abr a las 0:05

  • La versión más alta ya era 11 en 2020. Ver: mobileit.cz/Blog/Pages/android-java-release-train.aspx

    – mipá

    14 de mayo a las 9:09

Si alguien sigue recibiendo advertencias sobre una tarea de compilación de Java configurada en Java 1.8, puede agregar esto al script de gradle:

afterEvaluate {
    tasks.withType<JavaCompile>().configureEach {
        sourceCompatibility = JavaVersion.VERSION_11.toString()
        targetCompatibility = JavaVersion.VERSION_11.toString()
    }
}

Recibía advertencias sobre algunas tareas de compilación de Java en AS y esto me lo resolvió.

Esto funcionó muy bien para mí:

kotlin {
  jvmToolchain {
    languageVersion.set(JavaLanguageVersion.of("11"))
  }
}

De esa manera solo necesito configurarlo una vez.

Avatar de usuario de Rahul Raina
Raúl Raina

Esta solución funcionó para mí:

Simplemente reemplace la declaración (o similar a esto):

kotlinOptions {
    jvmTarget = JavaVersion.VERSION_1_8.toString() 
}

con

kotlinOptions {
    jvmTarget = "1.8"
}

en todo el nivel del módulo build.gradle archivos y luego sincronizar gradle.

Espero que esto funcione. ¡Feliz codificación…!

¿Ha sido útil esta solución?