Kotlin 注释处理器在将 Room 与 A​​ndroid Studio 3.0 beta7 一起使用时出现编译时错误

Posted

技术标签:

【中文标题】Kotlin 注释处理器在将 Room 与 A​​ndroid Studio 3.0 beta7 一起使用时出现编译时错误【英文标题】:Kotlin annotation processor gives compile time error while using Room with Android Studio 3.0 beta7 【发布时间】:2018-03-18 00:04:11 【问题描述】:

我正在使用 android Studio 3.0 Beta 7、Kotlin 1.4-2 和 Room Persistence Library 1.0.0-beta1 编译 Android 项目。

这是我在其中添加 Room 依赖项的 Gradle 文件的一部分:

implementation "android.arch.persistence.room:runtime:1.0.0-beta1"
kapt "android.arch.persistence.room:compiler:1.0.0-beta1"

编译时出现以下错误:

警告:警告:注释中支持的源版本“RELEASE_7” 处理器 'android.arch.persistence.room.RoomProcessor' 小于 -source '1.8'

将堆栈跟踪/调试标志添加到编译选项后,这是我得到的错误:

错误:org.jetbrains.kotlin.kapt3.diagnostic.KaptError:出错时 注释处理

10:08:03.727 [错误] [org.gradle.internal.buildevents.BuildExceptionReporter] 10:08:03.727 [错误] [org.gradle.internal.buildevents.BuildExceptionReporter] 失败:构建失败并出现异常。 10:08:03.727 [错误] [org.gradle.internal.buildevents.BuildExceptionReporter] 10:08:03.727 [错误] [org.gradle.internal.buildevents.BuildExceptionReporter] * 出了什么问题: 10:08:03.727 [错误] [org.gradle.internal.buildevents.BuildExceptionReporter] 任务“:app:kaptDebugKotlin”执行失败。 10:08:03.727 [错误] [org.gradle.internal.buildevents.BuildExceptionReporter] > 内部编译器错误。有关详细信息,请参阅日志 10:08:03.728 [错误] [org.gradle.internal.buildevents.BuildExceptionReporter] 10:08:03.728 [错误] [org.gradle.internal.buildevents.BuildExceptionReporter] * 例外是: 10:08:03.728 [错误] [org.gradle.internal.buildevents.BuildExceptionReporter] org.gradle.api.tasks.TaskExecutionException:任务':app:kaptDebugKotlin'的执行失败。 10:08:03.728 [错误] [org.gradle.internal.buildevents.BuildExceptionReporter] 在 org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:100) 10:08:03.728 [错误] [org.gradle.internal.buildevents.BuildExceptionReporter] 在 org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:70) 10:08:03.728 [错误] [org.gradle.internal.buildevents.BuildExceptionReporter] 在 org.gradle.api.internal.tasks.execution.SkipUpToDateTaskExecuter.execute(SkipUpToDateTaskExecuter.java:63) 10:08:03.728 [错误] [org.gradle.internal.buildevents.BuildExceptionReporter] 在 org.gradle.api.internal.tasks.execution.ResolveTaskOutputCachingStateExecuter.execute(ResolveTaskOutputCachingStateExecuter.java:54) 10:08:03.728 [错误] [org.gradle.internal.buildevents.BuildExceptionReporter] 在 org.gradle.api.internal.tasks.execution.ValidatingTaskExecuter.execute(ValidatingTaskExecuter.java:58) 10:08:03.728 [错误] [org.gradle.internal.buildevents.BuildExceptionReporter] at org.gradle.api.internal.tasks.execution.SkipEmptySourceFilesTaskExecuter.execute(SkipEmptySourceFilesTaskExecuter.java:88) 10:08:03.728 [错误] [org.gradle.internal.buildevents.BuildExceptionReporter] 在 org.gradle.api.internal.tasks.execution.ResolveTaskArtifactStateTaskExecuter.execute(ResolveTaskArtifactStateTaskExecuter.java:52) 10:08:03.728 [错误] [org.gradle.internal.buildevents.BuildExceptionReporter] at org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:52) 10:08:03.728 [错误] [org.gradle.internal.buildevents.BuildExceptionReporter] 在 org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:54) 10:08:03.728 [错误] [org.gradle.internal.buildevents.BuildExceptionReporter] 在 org.gradle.api.internal.tasks.execution.ExecuteAtMostOnceTaskExecuter.execute(ExecuteAtMostOnceTaskExecuter.java:43) 10:08:03.728 [错误] [org.gradle.internal.buildevents.BuildExceptionReporter] 在 org.gradle.api.internal.tasks.execution.CatchExceptionTaskExecuter.execute(CatchExceptionTaskExecuter.java:34) 10:08:03.728 [错误] [org.gradle.internal.buildevents.BuildExceptionReporter] 在 org.gradle.execution.taskgraph.DefaultTaskGraphExecuter$EventFiringTaskWorker$1.run(DefaultTaskGraphExecuter.java:248) 10:08:03.729 [错误] [org.gradle.internal.buildevents.BuildExceptionReporter] 在 org.gradle.internal.progress.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:336) 10:08:03.729 [错误] [org.gradle.internal.buildevents.BuildExceptionReporter] 在 org.gradle.internal.progress.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:328) 10:08:03.729 [错误] [org.gradle.internal.buildevents.BuildExceptionReporter] 在 org.gradle.internal.progress.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:197) 10:08:03.729 [错误] [org.gradle.internal.buildevents.BuildExceptionReporter] 在 org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:107) 10:08:03.729 [错误] [org.gradle.internal.buildevents.BuildExceptionReporter] 在 org.gradle.execution.taskgraph.DefaultTaskGraphExecuter$EventFiringTaskWorker.execute(DefaultTaskGraphExecuter.java:241) 10:08:03.729 [错误] [org.gradle.internal.buildevents.BuildExceptionReporter] 在 org.gradle.execution.taskgraph.DefaultTaskGraphExecuter$EventFiringTaskWorker.execute(DefaultTaskGraphExecuter.java:230) 10:08:03.729 [错误] [org.gradle.internal.buildevents.BuildExceptionReporter] 在 org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$TaskExecutorWorker.processTask(DefaultTaskPlanExecutor.java:124) 10:08:03.729 [错误] [org.gradle.internal.buildevents.BuildExceptionReporter] 在 org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$TaskExecutorWorker.access$200(DefaultTaskPlanExecutor.java:80) 10:08:03.729 [错误] [org.gradle.internal.buildevents.BuildExceptionReporter] 在 org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$TaskExecutorWorker$1.execute(DefaultTaskPlanExecutor.java:105) 10:08:03.729 [错误] [org.gradle.internal.buildevents.BuildExceptionReporter] 在 org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$TaskExecutorWorker$1.execute(DefaultTaskPlanExecutor.java:99) 10:08:03.729 [错误] [org.gradle.internal.buildevents.BuildExceptionReporter] 在 org.gradle.execution.taskgraph.DefaultTaskExecutionPlan.execute(DefaultTaskExecutionPlan.java:625) 10:08:03.729 [错误] [org.gradle.internal.buildevents.BuildExceptionReporter] 在 org.gradle.execution.taskgraph.DefaultTaskExecutionPlan.executeWithTask(DefaultTaskExecutionPlan.java:580) 10:08:03.729 [错误] [org.gradle.internal.buildevents.BuildExceptionReporter] 在 org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$TaskExecutorWorker.run(DefaultTaskPlanExecutor.java:99) 10:08:03.729 [错误] [org.gradle.internal.buildevents.BuildExceptionReporter] 在 org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:63) 10:08:03.729 [错误] [org.gradle.internal.buildevents.BuildExceptionReporter] 在 org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:46) 10:08:03.729 [错误] [org.gradle.internal.buildevents.BuildExceptionReporter] 在 org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:55) 10:08:03.729 [错误] [org.gradle.internal.buildevents.BuildExceptionReporter] 原因:org.gradle.api.GradleException:内部编译器错误。有关详细信息,请参阅日志 10:08:03.729 [错误] [org.gradle.internal.buildevents.BuildExceptionReporter] at org.jetbrains.kotlin.gradle.tasks.TasksUtilsKt.throwGradleExceptionIfError(tasksUtils.kt:9) 10:08:03.729 [错误] [org.gradle.internal.buildevents.BuildExceptionReporter] 在 org.jetbrains.kotlin.gradle.internal.KaptTask.compile(KaptTask.kt:71) 10:08:03.729 [错误] [org.gradle.internal.buildevents.BuildExceptionReporter] 在 org.gradle.internal.reflect.JavaMethod.invoke(JavaMethod.java:73) 10:08:03.729 [错误] [org.gradle.internal.buildevents.BuildExceptionReporter] at org.gradle.api.internal.project.taskfactory.DefaultTaskClassInfoStore$StandardTaskAction.doExecute(DefaultTaskClassInfoStore.java:141) 10:08:03.729 [错误] [org.gradle.internal.buildevents.BuildExceptionReporter] 在 org.gradle.api.internal.project.taskfactory.DefaultTaskClassInfoStore$StandardTaskAction.execute(DefaultTaskClassInfoStore.java:134) 10:08:03.729 [错误] [org.gradle.internal.buildevents.BuildExceptionReporter] 在 org.gradle.api.internal.project.taskfactory.DefaultTaskClassInfoStore$StandardTaskAction.execute(DefaultTaskClassInfoStore.java:121) 10:08:03.729 [错误] [org.gradle.internal.buildevents.BuildExceptionReporter] 在 org.gradle.api.internal.AbstractTask$TaskActionWrapper.execute(AbstractTask.java:731) 10:08:03.729 [错误] [org.gradle.internal.buildevents.BuildExceptionReporter] at org.gradle.api.internal.AbstractTask$TaskActionWrapper.execute(AbstractTask.java:705) 10:08:03.729 [错误] [org.gradle.internal.buildevents.BuildExceptionReporter] at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter$1.run(ExecuteActionsTaskExecuter.java:122) 10:08:03.729 [错误] [org.gradle.internal.buildevents.BuildExceptionReporter] 在 org.gradle.internal.progress.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:336) 10:08:03.729 [错误] [org.gradle.internal.buildevents.BuildExceptionReporter] 在 org.gradle.internal.progress.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:328) 10:08:03.729 [错误] [org.gradle.internal.buildevents.BuildExceptionReporter] 在 org.gradle.internal.progress.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:197) 10:08:03.729 [错误] [org.gradle.internal.buildevents.BuildExceptionReporter] 在 org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:107) 10:08:03.730 [错误] [org.gradle.internal.buildevents.BuildExceptionReporter] 在 org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeAction(ExecuteActionsTaskExecuter.java:111) 10:08:03.730 [错误] [org.gradle.internal.buildevents.BuildExceptionReporter] 在 org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:92) 10:08:03.730 [错误] [org.gradle.internal.buildevents.BuildExceptionReporter] ... 还有 27 个 10:08:03.730 [错误] [org.gradle.internal.buildevents.BuildExceptionReporter] 10:08:03.730 [错误] [org.gradle.internal.buildevents.BuildExceptionReporter] 10:08:03.730 [错误] [org.gradle.internal.buildevents.BuildExceptionReporter] * 在https://help.gradle.org 获得更多帮助 10:08:03.730 [错误] [org.gradle.internal.buildevents.BuildResultLogger] 10:08:03.730 [错误] [org.gradle.internal.buildevents.BuildResultLogger] 8 秒内构建失败

清理/重建没有帮助。什么可能导致此错误?临时解决方案似乎是用标准的“annotationProcessor”替换“kapt”,重建然后用“kapt”再次构建。但在项目进一步更改后,错误再次出现。

[编辑]

我的 Gradle 文件(应用模块):

apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
apply plugin: 'kotlin-kapt'

android 
    compileSdkVersion 26
    buildToolsVersion "26.0.2"
    defaultConfig 
        applicationId "com.mydomain.myapp"
        minSdkVersion 19
        targetSdkVersion 26
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    
    buildTypes 
        release 
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        
    


androidExtensions 
    experimental = true


dependencies 
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation 'com.android.support:appcompat-v7:26.1.0'
    implementation 'com.android.support.constraint:constraint-layout:1.0.2'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation('com.android.support.test.espresso:espresso-core:3.0.1', 
        exclude group: 'com.android.support', module: 'support-annotations'
    )
    implementation"org.jetbrains.kotlin:kotlin-stdlib-jre7:$kotlin_version"

    // Anko Commons
    implementation "org.jetbrains.anko:anko-commons:$anko_version"

    // Timber logging
    implementation "com.jakewharton.timber:timber:$timber_version"

    // Architecture components - Lifecycle
    implementation "android.arch.lifecycle:extensions:$arch_version"
    kapt "android.arch.lifecycle:compiler:$arch_version"

    // Architecture components - Room ORM
    implementation "android.arch.persistence.room:runtime:$arch_version"
    kapt "android.arch.persistence.room:compiler:$arch_version"

    // Retrofit
    implementation "com.squareup.retrofit2:retrofit:$retrofit_version"
    implementation "com.squareup.retrofit2:converter-gson:$retrofit_version"

    // Picasso
    implementation "com.squareup.picasso:picasso:$picasso_version"

Gradle(项目模块):

buildscript 
    ext.kotlin_version = '1.1.4-2'
    ext.anko_version = '0.10.1'
    ext.timber_version = '4.5.1'
    ext.retrofit_version = '2.3.0'
    ext.picasso_version = '2.5.2'
    ext.constraint_layout_version = '1.0.2'
    ext.support_library_version = '26.1.0'
    ext.arch_version = '1.0.0-beta1'
    repositories 
        google()
        jcenter()
    
    dependencies 
        classpath 'com.android.tools.build:gradle:3.0.0-beta7'
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
    


allprojects 
    repositories 
        google()
        jcenter()
    


task clean(type: Delete) 
    delete rootProject.buildDir

【问题讨论】:

忽略不相关的警告。打开View -> Tool Windows -> Terminal 并输入gradlew build。导航以查看异常的原因。最像你配置Room错误。由于 Room 会进行编译时检查,因此您无法构建它。 发布您的整个应用模块build.gradle 文件和gradle 构建日志 @Joshua 我不这么认为,因为 a)我还没有任何房间代码 b)与“android.arch.lifecycle:compiler:1.0.0-beta1”有同样的错误" 和 c) 当我按照我在帖子末尾提到的操作时,它就消失了。 @VictorNidens - 已编辑。 【参考方案1】:

我也在使用 kapt 插件和房间,并且遇到了类似的错误。就我而言,我通过将这一行apply plugin: 'kotlin-kapt'app build.gradle移动到top build.gradle,在buildscript块之外解决了这个问题,然后错误就消失了。 I found it here

【讨论】:

这似乎可以解决问题,我会测试1-2天,然后再接受您的问题。谢谢!【参考方案2】:

使用1.0.0-beta2代替依赖版本1.0.0-beta1并尝试编译。

【讨论】:

会检查一下,到目前为止没有再出现这个问题,但我还在 beta1 上。 文档声明架构组件的依赖版本已更新为beta2 是的,看到了,谢谢(我将继续使用 beta1 以确保此问题正在发生,稍后会更新 :)) 在使用 1.0.0-beta2 时仍然发生。 我一定会调查并尝试找到最佳解决方案。

以上是关于Kotlin 注释处理器在将 Room 与 A​​ndroid Studio 3.0 beta7 一起使用时出现编译时错误的主要内容,如果未能解决你的问题,请参考以下文章

以下选项未被任何处理器识别:'[kapt.kotlin.generated, room.incremental]'

在 Kotlin 中使用 Room 的 @ForeignKey 作为 @Entity 参数

Room & Kotlin 符号的处理

Room & Kotlin 符号的处理

找不到字段的设置器 - 将 Kotlin 与 Room 数据库结合使用

上手使用 Room Kotlin API