执行 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的主要内容,如果未能解决你的问题,请参考以下文章

jvm的解释执行与编译执行

Jmeter--多个线程组顺序执行和并行执行

小记---------手动执行脚本正常执行,使用crontab定时执行时 不执行

同步执行与异步执行

js函数执行顺序,怎麼让一个函数执行完再执行下面的程序

java中定时执行任务,为啥方法没有执行完就不执行了?