添加 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 时发生故障的主要内容,如果未能解决你的问题,请参考以下文章
什么是 Android kapt 及其用法?添加依赖项时,Gradle 中的注解处理器和 kapt 有什么区别?