build.gradle文件中的compileKotlin块抛出错误"找不到参数[...]"的方法compileKotlin()

时间:2017-05-23 17:09:28

标签: android gradle kotlin

我试图在我的Android项目中配置Kotlin以使用Java 1.8。我已尝试在compileKotlin文件的底部添加build.gradle块,但如果我这样做,则会收到错误。

发生的错误如下:

  

错误:(38,0)无法为参数找到方法compileKotlin()   项目[build_dvcqiof5pov8xt8flfud06cm3 $ _run_closure4 @ 66047120]   ':芯'类型为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'
    }
}

3 个答案:

答案 0 :(得分:55)

您获得的错误意味着项目中没有compileKotlin任务,这是Android项目所期望的。

Android项目中的Kotlin编译任务名称包含build variant名称(这些名称由构建类型,产品风格和其他设置组合而成,看起来像debugreleaseUnitTest - 任务分别是compileDebugKotlincompileReleaseUnitTestKotlin。没有compileKotlin任务,通常是为普通Java + Kotlin项目中的main源集创建的。

最有可能的是,您希望在项目中配置所有 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'
    }
}

答案 1 :(得分:2)

来自kotlin-android documentation

Android插件还向Android部分添加了 kotlinOptions 扩展名,以设置所有kotlin任务的选项:

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

答案 2 :(得分:1)

不是该问题的直接答案,但是当遇到相同的compileKotlin block in build.gradle file throws error “Could not find method compileKotlin() for arguments […]”错误时,Google引导我找到了这个答案。

对于我来说,问题是由于将代码模块导入到仅包含Java代码的项目中引起的。解决方法是确保以下内容位于Java专用模块的build.gradle中:

apply plugin: 'kotlin-android'