Подтвердить что ты не робот

CompileKotlin block in build.gradle file throws error "Не удалось найти метод compileKotlin() для аргументов [...]"

Я пытаюсь настроить Kotlin для работы с Java 1.8 в моем проекте Android. Я попытался добавить блок compileKotlin в нижней части моего файла build.gradle, но я получаю сообщение об ошибке, если я это сделаю.

Произошла следующая ошибка:

Ошибка: (38, 0) Не удалось найти метод compileKotlin() для аргументов [build_dvcqiof5pov8xt8flfud06cm3 $_run_closure4 @66047120] по проекту ': core' типа org.gradle.api.Project.

Проект работает отлично без этого блока. Что мне не хватает? Здесь полный файл build.gradle, это довольно простой материал:

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'
    }
}
4b9b3361

Ответ 1

Ошибка, которую вы получаете, означает, что в проекте нет задачи compileKotlin, и это ожидалось для проектов Android.

Имена задач компиляции Kotlin в проектах Android содержат вариант сборки (они объединены из типа сборки, вкуса продукта и других настроек и выглядят например debug или releaseUnitTest - задачи compileDebugKotlin и compileReleaseUnitTestKotlin соответственно). Нет задачи compileKotlin, которая обычно создается для источника main, заданного в обычных проектах Java + Kotlin.

Скорее всего, вы хотите сконфигурировать все задачи компиляции Kotlin в проекте, и для этого вы можете применить блок следующим образом:

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'
    }
}

Ответ 2

Из документации по kotlin-android:

Плагин Android также добавляет расширение kotlinOptions в раздел android для настройки параметров всех задач kotlin:

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

Ответ 3

Не прямой ответ на вопрос, но Google привел меня к этому ответу при появлении той же ошибки compileKotlin block in build.gradle file throws error 'Could not find method compileKotlin() for arguments […]'.

В моем случае проблема была вызвана импортом модуля кода в мой проект, который содержал только код Java. Исправление состояло в том, чтобы убедиться, что в модуле Java build.gradle есть следующее:

apply plugin: 'kotlin-android'