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

Posted

技术标签:

【中文标题】添加 Kapt 插件后 - 执行 org.jetbrains.kotlin.gradle.internal.KaptExecution 时发生故障【英文标题】:After adding Kapt plugin - A failure occurred while executing org.jetbrains.kotlin.gradle.internal.KaptExecution 【发布时间】:2020-11-17 20:47:39 【问题描述】:

首先,

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

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

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

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

apply plugin: 'kotlin-kapt'

apply plugin: 'realm-android'

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

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

在此之后编译项目时,总体出现以下错误。

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 类,该类没有改变,似乎没有任何错误或错别字。 我很确定 kapt 注释处理器在这里做了一些我似乎没有弄清楚的肮脏工作。

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

补充说明:

    我将整个项目分为三个模块。这三个都有 kapt 插件(只是以防万一)

    我将 Koin 用于 DI

希望有人能帮帮我!

【问题讨论】:

检查你的道课程。从java转换时,名称以“get”开头的方法可能会出错 【参考方案1】:

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

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

我有一个名为interface 的文件夹来保存一些接口。

我在 MainActivity 的 interface 文件夹中实现了其中一个接口。

现在接口的import 是这样的,

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

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

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

这解决了错误。

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

总之,找到问题了。耶!

【讨论】:

好吧,不要使用像上面仅供参考的蹩脚名字。 我在领域面临同样的问题任何解决方案? @Arbaz.in 您遇到的错误是什么?在哪个文件中?您是否将 kotlin 关键字作为文件/包名称? @Arbaz.in 请发布错误。停止工作了吗? 我将领域从 4.3.3 更新到 10.3.0,突然在每次领域查询执行时都出现此错误 ERROR: allowWritesOnUiThread(true)【参考方案2】:

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

【讨论】:

其实这是很重要的一点,没人能注意到它,我遇到了这个问题,搜索了很多,直到我找到了这个答案。谢谢兄弟【参考方案3】:

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

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

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

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

【讨论】:

【参考方案4】:

更换

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

通过

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

也可以修复它。

【讨论】:

太好了,我遇到了同样的问题,tnx【参考方案5】:

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

【讨论】:

【参考方案6】:

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

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

--debug build 在大多数情况下都可以提供帮助。在这种情况下,它表示不能在 Element 中转换 long

然后就变成了

@Delete
fun deleteRelationShip(relationShip: RelationShip)

【讨论】:

【参考方案7】:

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

【讨论】:

【参考方案8】:

检查您在 Model DB 中的字段 也许你有 val,像这样更改为 var:

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

【讨论】:

【参考方案9】:

如果在应用中使用了 Room,可能与 Room 相关类中添加的一些错误有关。我有同样的错误,花了几个小时才弄清楚这个问题。我在@Database(entities=[...]) 的实体会话中给出了错误的类名

【讨论】:

【参考方案10】:

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

【讨论】:

【参考方案11】:

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

【讨论】:

以上是关于添加 Kapt 插件后 - 执行 org.jetbrains.kotlin.gradle.internal.KaptExecution 时发生故障的主要内容,如果未能解决你的问题,请参考以下文章

maven 支持 kapt 吗?

如何更改 kapt 插件生成输出目录路径?

什么是 Android kapt 及其用法?添加依赖项时,Gradle 中的注解处理器和 kapt 有什么区别?

使用 kapt 和 gradle 时无法调试注释处理器

错误:将 Android Studio 更新到 3.2 后,无法更改配置 ':android:kapt' 的属性

找不到参数的方法 kapt()