compileKotlin-blok in build.gradle-bestand geeft fout “Kon methode compileKotlin() niet vinden voor argumenten […]”

Ik probeer Kotlin te configureren om met Java 1.8 te werken in mijn Android-project. Ik heb geprobeerd het compileKotlin-blok toe te voegen aan de onderkant van mijn build.gradle-bestand, maar ik krijg een foutmelding als ik dat doe.

De fout die optreedt is de volgende:

Fout:(38, 0) Kon methode compileKotlin() voor argumenten niet vinden
[build_dvcqiof5pov8xt8flfud06cm3$_run_closure4@66047120] op project
‘:core’ van het type org.gradle.api.Project.

Het project werkt prima zonder dit blok. Wat mis ik? Hier is het volledige build.gradle-bestand, het is vrij eenvoudig:

apply plugin: 'com.android.library'
apply plugin: 'kotlin-android'
android {
    compileSdkVersion 25
    buildToolsVersion '25.0.2'
    defaultConfig {
        minSdkVersion 24
        targetSdkVersion 25
        versionCode 1
        versionName '1.0.0'
        testInstrumentationRunner 'android.support.test.runner.AndroidJUnitRunner'
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}
dependencies {
    compile 'com.android.support:appcompat-v7:25.3.1'
    compile "org.jetbrains.kotlin:kotlin-stdlib-jre7:$kotlin_version"
    compile 'com.google.android.support:wearable:2.0.2'
}
repositories {
    mavenCentral()
}
compileKotlin {
    sourceCompatibility = JavaVersion.VERSION_1_8
    targetCompatibility = JavaVersion.VERSION_1_8
    kotlinOptions {
        jvmTarget = '1.8'
        apiVersion = '1.1'
        languageVersion = '1.1'
    }
}

Antwoord 1, autoriteit 100%

De foutmelding die u krijgt, betekent dat er geen compileKotlin-taak in het project zit, en dat wordt verwacht voor Android-projecten.

De namen van de Kotlin-compilatietaken in Android-projecten bevatten de buildvariantnamen (deze zijn gecombineerd van buildtype, productaroma en andere instellingen en zien eruit als debugof releaseUnitTest— de taken zijn compileDebugKotlinen compileReleaseUnitTestKotlinrespectievelijk). Er is geen compileKotlin-taak, die meestal wordt gemaakt voor de main-bronset in gewone Java + Kotlin-projecten.

Hoogstwaarschijnlijk wilt u alleKotlin-compilatietaken in het project configureren, en om dat te doen, kunt u het blok als volgt toepassen:

tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile).all {
    sourceCompatibility = JavaVersion.VERSION_1_8
    targetCompatibility = JavaVersion.VERSION_1_8
    kotlinOptions {
        jvmTarget = '1.8'
        apiVersion = '1.1'
        languageVersion = '1.1'
    }
}

Antwoord 2, autoriteit 45%

Van de kotlin-android documentatie:

Android-plug-in voegt ook de extensie kotlinOptionstoe aan de Android-sectie om opties in te stellen voor alle kotlin-taken:

android {
    kotlinOptions {
        jvmTarget = '1.8'
        noStdlib = true
    }
}

Antwoord 3, autoriteit 2%

Geen direct antwoord op de vraag, maar Google leidde me naar dit antwoord toen hetzelfde compileKotlin block in build.gradle file throws error “Could not find method compileKotlin() for arguments […]”fout.

In mijn geval werd het probleem veroorzaakt door het importeren van een codemodule in mijn project die alleen Java-code bevatte. De oplossing was om ervoor te zorgen dat het volgende in build.gradlevan de Java-specifieke module staat:

apply plugin: 'kotlin-android'

Other episodes