添加 Kapt 插件后 - 执行时发生故障 org.jetbrains.kotlin.gradle.internal.KaptExecution

After adding Kapt plugin - A failure occurred while executing org.jetbrains.kotlin.gradle.internal.KaptExecution

首先,

我很清楚这里已经发布了很多关于此错误的问题,其中 none 似乎有合适的解决方案,尤其是我需要的解决方案。

我被以下错误困扰了一个多星期。

我正在开发一个 android 项目,该项目正在使用 Kotlin、MVVM、Clean Arch 和导航组件构建。

我最近添加了领域数据库,为此我不得不添加以下插件。

apply plugin: 'kotlin-kapt'

apply plugin: 'realm-android'

我认为真正的问题是从这里开始的。

(之后我添加了一个 DatabaseManager class,它利用我编写的一些领域扩展函数来进行数据库操作。)

此后编译项目时,整体出现如下错误

A failure occurred while executing org.jetbrains.kotlin.gradle.internal.KaptExecution

连同以下内容

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':app:kaptDebugKotlin'.
> A failure occurred while executing org.jetbrains.kotlin.gradle.internal.KaptExecution
   > java.lang.reflect.InvocationTargetException (no error message)

* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.

* Get more help at https://help.gradle.org

Deprecated Gradle features were used in this build, making it incompatible with Gradle 7.0.
Use '--warning-mode all' to show the individual deprecation warnings.
See https://docs.gradle.org/6.1.1/userguide/command_line_interface.html#sec:command_line_warnings

BUILD FAILED in 7s
30 actionable tasks: 6 executed, 24 up-to-date

它指向我的 MainActivity class,它没有改变,似乎没有任何错误或拼写错误。 我非常确定 kapt 注释处理器在这里做了一些我似乎没有弄清楚的肮脏工作。

如果我能克服这个奇怪的错误,我会大大松一口气。

补充说明:

  1. 我把整个项目分成了三个模块。这三个都有 kapt 插件(以防万一)

  2. 我用 Koin 做 DI

希望有人能帮帮我!

经过一周的努力,我终于找到了问题。

我为领域添加了 kotlin-kapt 插件。

我有一个名为 interface 的文件夹,它本身用于保存一些接口。

我在 MainActivity 的界面文件夹中实现了其中一个界面。

现在界面的 import 是这样的,

import com.android.app.java.interface.Listener

其中,关键字interface混淆了注释处理器,因此在生成存根时导致错误。

我重命名了文件夹(从 interface 到 intrface)。

解决了错误。

这是一个非常简单的错误,让我损失了一周的时间。

总之,找到问题了。耶!

我遇到了同样的问题,因为我忘记在实体中包含的列表中添加转换器。在房间中,您必须添加转换器才能将列表存储在数据库中

我遇到了类似的问题,并且一直在努力寻找问题所在。我找到了另一个线程,您可以 运行 分析 -> 检查代码来查找问题,但这对我不起作用并且没有显示任何内容,但显然其他人已经成功了。

我的问题最终出在我的数据库上(我使用的是 Room),解决方法只是删除我在 DAO 中的插入函数上的“暂停”..

我通过查看 java 生成的代码文件夹发现了这个问题。查看所有使用“_Impl”生成的数据库文件。该错误以红色突出显示,然后我可以从这里推断出出了什么问题(虽然我不知道为什么 Android Studio 不能只在构建输出中向我显示该错误:/)

祝你好运!那些 kapt 错误是最糟糕的

正在替换

kapt "android.arch.persistence.room:compiler:$room_version"

来自

implementation "androidx.room:room-runtime:$room_version"
kapt "androidx.room:room-compiler:$room_version"

也可能会修复它。

我遇到了同样的问题。我忘记在我的房间数据库中添加 @Dao 注释

我在带有 Long 个参数的方法上添加了 @Delete 注释:

@Delete
fun deleteRelationShip(userId: Long, friendId: Long)

--debug build 在大多数情况下都有帮助。在这种情况下,它表示无法在 Element

中转换 long

然后变成

@Delete
fun deleteRelationShip(relationShip: RelationShip)

对我来说,当我重写 dao class 它解决了问题

检查模型数据库中的字段 也许你有 val,像这样更改为 var:

open class User(var id: Int?= null,
            var name: String? = null,
            var lastName: String? = null): RealmObject()

如果在应用程序中使用了 Room,则可能与房间相关 classes 中添加的一些错误有关。我有同样的错误,花了几个小时才弄清楚这个问题。我在 @Database(entities=[...])

的实体会话中给出了错误的 class 名称

我遇到了同样的问题,但我所做的是将所有依赖项更新到最新版本,这对我有用

对我来说有什么帮助 将 apply plugin 'kotlin-kapt' 替换为 plugins{ id 'kotlin-android' id 'kotlin-kept'} 仅评论应用插件就足够了,仍然要摆脱警告和 kotlin-android-extensions 我必须重写一些代码以不使用 syntetic 类.