Wie setze ich die CompileJava-Aufgabe (11) und die JVM-Zielkompatibilität der Aufgabe „CompileKotlin“ (1.8) auf dieselbe Java-Version in build.gradle.kts?

Lesezeit: 4 Minuten

Benutzeravatar von jitendra kumar
jitendra kumar

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

FEHLER: Die Aufgabe „compileJava“ (aktuelles Ziel ist 11) und die Aufgabe „compileKotlin“ (aktuelles Ziel ist 1.8) jvm-Zielkompatibilität sollte auf dieselbe Java-Version eingestellt werden.

Wenn ich Android {} auskommentiere, Fehler: Skriptkompilierungsfehler:

 Line 15: android {
           ^ Unresolved reference: android

Danke für deine Zeit und Mühe 🙂 Jitendra

  • Beachten Sie, dass diese Meldung eigentlich gar nicht erscheinen sollte, wenn Sie keine Java-Quellen (nur Kotlin-Quellen) haben, siehe auch youtrack.jetbrains.com/issue/KT-48745.

    – Schubert

    24. September 2021 um 15:25 Uhr

  • Ich glaube, dass der “Android”-Block nicht aufgelöst wird, weil Sie weder das Plugin “com.android.application” noch das Plugin “com.android.library” angewendet haben

    – Tom Rutschik

    27. April um 17:48 Uhr

Marians Benutzeravatar
Marian

Sie können die Java-Version für Java mit festlegen

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

oder alternativ:

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

und für kotlin mit:

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

Alle Beispiele sind in gradle kotlin dsl.

  • Hinweis: Wenn ich Ihre verwende tasks.withType<> wie es ist, bekomme ich Could not get unknown property 'withType' for task set of type org.gradle.api.internal.tasks.DefaultTaskContainer . Fehler verschwindet bei der Verwendung tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile) {; Also Klammern statt < >. Aber leider führt das immer noch zu derselben Warnung, nach der der Fragesteller gefragt hat ;-(

    – Geisterkatze

    17. Februar um 7:43 Uhr


  • @GhostCat Ich bin gerade mit einer alten Build-Datei darauf gestoßen Gebraucht richtig funktionieren (mit <> nicht ()), nachdem ich die aktualisiert habe kotlin("jvm") Ausführung. Ich nahm an, dass es sich um eine schrittweise API-Änderung handelte, konnte aber keinen korrekten Weg finden, dies zu tun. :\ Das einzig Wichtige dazwischen war ein “Caches ungültig machen und neu starten”, weil eine neuere Version einer abhängigen JAR-Datei nicht richtig indiziert wurde. Sie und Ihre zwei Häkchen implizieren, dass ich nicht verrückt bin, obwohl ich annehme, dass dieses Problem nicht leicht zu reproduzieren ist …

    – CodeClown42

    28. Mai um 15:56 Uhr


  • Vielleicht hängt es von den Kotlin-Plugin-Versionen ab. Hier gibt es verschiedene bewegliche Teile.

    – Geisterkatze

    6. Juni um 9:17

  • Die Frage war für build.gradle.kts, tasks.withType<T> { ... } ist Kotlin Gradle DSL-Syntax, tasks.withType(T) { ist Gradle Groovy-Syntax.

    – TWiStErRob

    16. August um 17:36 Uhr

@ Marians Antwort hat mir nicht ganz geholfen.

Am Ende setze ich Folgendes in der App build.gradle

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

    kotlinOptions {
        jvmTarget=11
    }
...
}

  • Hat das wirklich für dich funktioniert? Ich dachte, Android sei auf jvm 1.8 beschränkt!

    – Tom Rutschik

    27. April um 17:52 Uhr

  • Seit Android Gradle Plugin 7.0 wird Java 11 benötigt. Und das obige funktioniert für mich.

    – LXJ

    27. April um 18:17 Uhr

  • Ja, ich wusste, dass das Android-Gradle-Plugin Java 11 benötigt. Das ist die minimale JVM-Stufe, die für Ihre Builds benötigt wird. Android/compileOption/sourceCompatibiity ist die JVM-Ebene, auf die Ihr Android-Code kompiliert werden soll, und das ist, was ich verstehe, auf Version 1.8 beschränkt. Ich denke, wenn Sie einige Java 11-Funktionen in Ihrem Android-Code verwenden, wird es meiner Meinung nach kaputt gehen.

    – Tom Rutschik

    28. April um 0:05 Uhr

  • Die höchste Version war bereits 2020 11. Siehe: mobileit.cz/Blog/Pages/android-java-release-train.aspx

    – mipa

    14. Mai um 9:09 Uhr

Wenn jemand weiterhin Warnungen über eine Java-Kompilierungsaufgabe erhält, die auf Java 1.8 eingestellt ist, können Sie dies dem Gradle-Skript hinzufügen:

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

Ich habe Warnungen zu einigen Java-Kompilierungsaufgaben auf AS erhalten und dies hat es für mich gelöst.

Das hat bei mir gut funktioniert:

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

So muss ich es nur einmal einstellen.

Benutzeravatar von Rahul Raina
Raul Raina

Diese Lösung hat bei mir funktioniert:

Ersetzen Sie einfach die Anweisung (oder ähnlich wie diese):

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

mit

kotlinOptions {
    jvmTarget = "1.8"
}

in der gesamten Modulebene build.gradle Dateien und dann gradle synchronisieren.

Hoffe das funktioniert. Viel Spaß beim Programmieren…!

1431170cookie-checkWie setze ich die CompileJava-Aufgabe (11) und die JVM-Zielkompatibilität der Aufgabe „CompileKotlin“ (1.8) auf dieselbe Java-Version in build.gradle.kts?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy