执行 org.jetbrains.kotlin.gradle.internal.KaptExecution > java.lang.reflect.InvocationTargetExcepti
Posted
技术标签:
【中文标题】执行 org.jetbrains.kotlin.gradle.internal.KaptExecution > java.lang.reflect.InvocationTargetException 时发生故障(无错误消息)【英文标题】:A failure occurred while executing org.jetbrains.kotlin.gradle.internal.KaptExecution > java.lang.reflect.InvocationTargetException (no error message) 【发布时间】:2020-12-18 07:50:47 【问题描述】:android studio 报错:
Execution failed for task ':app:kaptDebugKotlin'.
> A failure occurred while executing org.jetbrains.kotlin.gradle.internal.KaptExecution
> java.lang.reflect.InvocationTargetException (no error message)
我想在我的项目中添加 Kotlin Coroutines 并将其与 Room 数据库一起使用。但是在添加了所有库后,我得到了这个错误。这是来自编译器的所有信息。
我已经确定了,这是因为注释@Database。如果我删除了此注释,则不会出现错误,但 Room 也无法正常工作。
我的 gradle 文件:
apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
apply plugin: 'kotlin-kapt'
//apply plugin: 'androidx.navigation.safeargs'
kotlin
experimental
coroutines 'enable'
android
compileSdkVersion 29
defaultConfig
applicationId "com.bestcred.coursetthree"
minSdkVersion 21
targetSdkVersion 29
versionCode 1
versionName "1.0"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
//vectorDrawables.useSupportLibrary = true
buildTypes
release
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
// Enables data binding.
buildFeatures
dataBinding true
dependencies
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
// Support libraries
implementation "androidx.appcompat:appcompat:1.2.0"
implementation 'com.google.android.material:material:1.2.0'
implementation "androidx.fragment:fragment:1.2.5"
implementation "androidx.constraintlayout:constraintlayout:2.0.0"
// Android KTX
implementation 'androidx.core:core-ktx:1.3.1'
// Room and Lifecycle dependencies
implementation "androidx.room:room-runtime:$room_version"
implementation 'androidx.legacy:legacy-support-v4:1.0.0'
kapt "android.arch.persistence.room:compiler:$room_version"
// Kotlin Extensions and Coroutines support for Room
implementation "androidx.room:room-ktx:$room_version"
// Coroutines
implementation "org.jetbrains.kotlinx:kotlinx-coroutines-core:$coroutine_version"
implementation "org.jetbrains.kotlinx:kotlinx-coroutines-android:$coroutine_version"
kotlin_version = "1.4.0"
room_version = "2.2.5"
coroutine_version = '1.3.9'
我更新了 Room 版本并添加了 Kotlin 协程。什么问题?
【问题讨论】:
【参考方案1】:你需要改变:
kapt "android.arch.persistence.room:compiler:$room_version"
到
kapt "androidx.room:room-compiler:$room_version"
【讨论】:
为我工作。其他什么都没做。【参考方案2】:我必须将 Room 更新到最新的 2.2.5
,它已经解决了这个问题。
【讨论】:
【参考方案3】:当您在 Room 数据库 或 Doa 或 实体类 上犯了错误时会发生此异常 例如我在实体类中犯了错误
-
我已将实体类的自动生成字段设为 val 而不是 var
我已在两个名称不同的函数上添加了删除注释,但它们正在删除相同的数据
所以如果你导入了正确的依赖项,我建议仔细检查实体、dao 或数据库类。
@Entity(tableName = "user_table")
data class User(
val firstName: String,
val lastName: String,
val age: Int
)
@PrimaryKey(autoGenerate = true)
var id: Int = 0 //**do not made it val**
【讨论】:
此答案对于此类错误也有效。我的外键名称有错误,并修复它解决了问题。谢谢【参考方案4】:我也遇到过同样的问题。问题是因为我在 Room DAO 中使用了协程挂起函数,并且没有实现必要的实现。以下对我有用,尝试将现有的 Room 依赖项替换为:
def room_version = "2.2.5" //Use latest version
"androidx.room:room-runtime:$room_version"
"androidx.room:room-compiler:$room_version"
"androidx.room:room-ktx:$room_version"
如果上述方法不起作用,请转到分析->检查代码并检查代码破坏警告或错误(特别是在房间中)
【讨论】:
【参考方案5】:Android Studio 的 UI 只是隐藏了错误...
当错误发生时,它会在列表视图中突出显示该项目,并在终端视图中显示一条无用的消息。
要查找真正的错误,请在列表视图中选择根项,以便 Android Studio 在终端视图中显示整个构建输出,然后滚动查找错误。
【讨论】:
啊……我之前遇到过这个问题,但不记得解决方案了。为了解决之前的问题,我必须设置命令行构建并搜索输出。这更容易,更直接!!!为您奖励积分并获得特殊徽章。顺便说一句 - 我的问题与升级编译器和框架(可能是空间)后我的 Dao 对象中的 @Transaction 函数有关。 在我的情况下,我看不到左侧的列表,就像您的屏幕截图@Eric 中那样 在我的情况下,选择根项目时未显示错误...从终端执行./gradlew clean build
显示错误
并非总是如此。我选择构建失败,但它也不包含任何内容【参考方案6】:
确保在数据库注释中包含所有实体。
【讨论】:
【参考方案7】:在我的例子中,我将 insertAll() 和 delete() 函数的参数类型作为数据库的实体,错误已解决
@Dao
interface NotesDao
@Insert
fun insertAll(INotesEntity: NotesEntity) // argument type should be entity of your database
@Delete
fun delete(DNotesEntity: NotesEntity) // argument type should be entity of your database
【讨论】:
【参考方案8】:这个问题发生在包重命名 我已将所有文件从一个包拖放到另一个包。
Objectbox它创建了光标文件和实体文件(自动生成的文件)
不得不删除它们并重新构建。
它连续吃了 1 小时 -_-
【讨论】:
你在哪里删除了什么文件?【参考方案9】:我在 Apple Silicon Macbook M1 上开发。
使用 room_version 2.2.4, 在 2.2.5 中失败
def room_version = "2.2.4"
implementation "androidx.room:room-runtime:$room_version"
kapt "androidx.room:room-compiler:$room_version"
implementation "androidx.room:room-ktx:$room_version"
testImplementation "androidx.room:room-testing:$room_version"
【讨论】:
我也在使用 M1,这解决了我的问题2.3.0
在 M1 上也失败了。 2.2.4
工作正常。它修复在2.4.0-alpha03
【参考方案10】:
我可能会迟到,但只有以下解决方案对我有用。
在 Android Studio 中打开 gradle.properties 文件。
添加以下行:
kapt.use.worker.api=false
kapt.incremental.apt=false
清理并重新构建应用程序。
完成
【讨论】:
【参考方案11】:我将 Room 版本从 2.2.5 更新到 2.3.0 或 build.gradle 脚本文件中的当前版本。构建成功。
【讨论】:
【参考方案12】:今天我遇到了这个错误。就我而言,我的笔记本电脑中同时安装了 java 11 和 java 16,而 java 16 是默认设置。但是我项目中的 gradle 使用 java 11 来构建它。所以当我调用
$ gradle build
在我的终端上,它将使用 java 16,因此构建失败。我知道,正确的解决方案是让我的代码与 java 16 兼容,但现在,我明确告诉 gradle 使用以下命令使用 java 11:
$ gradle build -Dorg.gradle.java.home=/usr/lib/jvm/java-11-openjdk-amd64 # warning: use te path to your java 11
因为它是一个大命令,所以我将它保存在一个脚本文件中,因此只需运行脚本就可以解决我的问题。
【讨论】:
在 Android Studio 中转到 Settings (Alt+Ctrl+S) ➡ Build, Execution, Deployment ➡ Build Tools 并选择正确的 Gradle JDK 版本。 android studio 使用的是 java 11,没关系。但是你看,我们正在开发一个 android 库。该库应使用 github 包发布。上次我检查时,所有教程都使用终端。所以在我的用例中,我必须使用终端构建和发布。这就是我遇到麻烦的原因。【参考方案13】:我目前在使用 Room 版本 2.3.0
的 m1 Mac 上遇到此错误。
我通过将其更改为 2.4.0-alpha04
来修复它。
这已报告给 Google (issue tracker)。
【讨论】:
你拯救了我的一天。谢谢!【参考方案14】:尝试将其添加到您的app/build.gradle
文件中并再次运行该程序。它帮助我找到了问题的真正原因。
kapt
correctErrorTypes true
【讨论】:
救命稻草。谢谢! 太棒了,谢谢!【参考方案15】:唯一对我有用的东西-
在 gradle.properties 中替换以下行 -
org.gradle.jvmargs=-Xmx2048m -Dfile.encoding=UTF-8
通过
org.gradle.jvmargs=--illegal-access=permit
【讨论】:
【参考方案16】:确保将 Gradle JDK 设置为正确的版本(尽管我已经使用 JDK 11 很长时间了,但它已设置为 JDK 8)。
打开首选项 -> 构建工具 -> Gradle -> 设置 Gradle JDK。
Image of Gradle JDK in Android Studio
【讨论】:
以上是关于执行 org.jetbrains.kotlin.gradle.internal.KaptExecution > java.lang.reflect.InvocationTargetExcepti的主要内容,如果未能解决你的问题,请参考以下文章