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

Resuelto jitendra kumar asked hace 3 años • 0 respuestas

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")

Obtuve el siguiente error:

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

Cuando descomento android {}, obtengo:

Error: errores de compilación del script:

 Line 15: android {
           ^ Unresolved reference: android
jitendra kumar avatar Sep 07 '21 03:09 jitendra kumar
Aceptado

También debemos prestar atención a la versión que muestra el error . En mi caso fue:

Causado por: org.gradle.api.GradleException: tarea 'compileDebugJavaWithJavac' ( el objetivo actual es 1.8 ) y tarea 'compileDebugKotlin' ( el objetivo actual es 17 ). La compatibilidad del objetivo jvm debe establecerse en la misma versión de Java.

Lo que significa que el IDE de Android Studio está usando 17 (puede encontrarlo en Menú Archivo->Estructura del proyecto->Ubicación del SDK->Ubicación del JDK)

Y estás usando 1.8 en tus archivos gradle.

Entonces necesitas cambiar

compileOptions {
    sourceCompatibility JavaVersion.VERSION_1_8
    targetCompatibility JavaVersion.VERSION_1_8
}

y

kotlinOptions {
    jvmTarget = '1.8'
}

a

compileOptions {
    sourceCompatibility JavaVersion.VERSION_17
    targetCompatibility JavaVersion.VERSION_17
}

y

kotlinOptions {
    jvmTarget = '17'
}

Tenga en cuenta que

Como el error mostraba 17, también cambié a 17.

Esto sucedió cuando actualicé gradle a 8.0.

Tenga cuidado con los problemas de liberación. Por favor haga una copia de seguridad antes de realizar el procedimiento. Puede enfrentar problemas en la versión aab.

Asegúrese de verificar la versión de apk después de realizar este procedimiento, porque R8 espera cosas como esta

Reejesh avatar Apr 20 '2023 05:04 Reejesh

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.

Marian avatar Sep 07 '2021 08:09 Marian

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
    }
...
}
LXJ avatar Feb 20 '2022 13:02 LXJ

Para tener la "misma versión de Java" tanto en "Java como en Kotlin" ,
simplemente modifique su archivo build.gradle de esta manera (ejemplo dado para Java 11):

apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
...
android {
    ...
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_11
        targetCompatibility JavaVersion.VERSION_11
    }

    // New syntax (credit goes to ʍѳђઽ૯ท in comment)
    kotlin {
        jvmToolchain(11)
    }
/*
    FYI: Old syntax:
    kotlin {
        jvmToolchain {
            languageVersion.set(JavaLanguageVersion.of("11"))
        }
    }
    FYI: Deprecated syntax:
    kotlinOptions {
        jvmTarget = "11"
    }
*/
    ...
}

Mi configuración:

Gradle:

  • Complemento de Gradle para Android: com.android.tools.build:gradle:7.4.1
  • Gradle: 7.5 (a partir de ./gradle/wrapper/gradle-wrapper.properties)

Kotlin:

  • Complemento de Android Kotlin: 221 (221-1.8.0-release-for-android-studio-AS5591.52)
    (consulte https://kotlinlang.org/docs/whatsnew18.html#install-kotlin-1-8-0 )
  • Complemento Kotlin Gradle: org.jetbrains.kotlin:kotlin-gradle-plugin:1.8.0

Acerca de la nueva sintaxis :
consulte Nuevo método para la configuración de la cadena de herramientas JVM

NB:
Más información sobre la configuración de Kotlin al respecto está disponible aquí: https://blog.jetbrains.com/kotlin/2021/11/gradle-jvm-toolchain-support-in-the-kotlin-plugin/

Pascal avatar Feb 09 '2023 08:02 Pascal