android - 尝试将 Android Gradle 项目从 Groovy 迁移到 Kotlin 时出现 CacheOpenException

标签 android android-studio gradle kotlin gradle-kotlin-dsl

所以我正在尝试将我在一个简单玩具应用程序中的 build.gradle 文件从 Groovy 迁移到新的 Kotlin dsl for Gradle。我已经能够成功迁移我的项目 build.gradle 文件,并且我还创建了一个 buildSrc 目录,其中包含 Kotlin 文件中的所有版本号等。到目前为止,gradle 正在成功同步和构建。但是当我尝试将我的应用程序 build.gradle 转换为 Kotlin(通过更改文件扩展名并更改所有函数调用和映射等以遵循 Kotlin 语法)时,我的 gradle 同步出现错误,上面写着:

org.gradle.internal.exceptions.LocationAwareException: A problem occurred configuring project ':app'.
Caused by: org.gradle.api.ProjectConfigurationException: A problem occurred configuring project ':app'.
Caused by: org.gradle.cache.CacheOpenException: Could not open cache directory er2fj44y4paf4xwhwuc5jhit0 (C:\Users\Youssef Shoaib\.gradle\caches\5.6.4\gradle-kotlin-dsl-accessors\er2fj44y4paf4xwhwuc5jhit0).
Caused by: java.util.zip.ZipException: zip file is empty

我已经尝试重建和清理构建,但它仍然无法正常工作。当我将应用程序 build.gradle 改回 groovy 时,错误消失了,一切正常,但我真的想将 Kotlin DSL 用于 Gradle。我也尝试过更改我的 Kotlin 版本和 Gradle 版本,但仍然无法正常工作。
作为引用,这是我的 buildSrc build.gradle.kts
plugins {
    `kotlin-dsl`
}
repositories {
    jcenter()
}

以及 buildSrc 模块中的 Dependencies.kt:
object Versions {
    const val version_core = "1.1.0"
    const val version_coroutine = "1.1.1"
    const val version_constraint_layout = "1.1.3"
    const val version_gradle = "3.5.3"
    const val version_kotlin = "1.3.61"
    const val version_lifecycle_extensions = "2.1.0"
    const val version_navigation = "2.1.0"
    const val version_room = "2.2.2"
}

和我的项目 build.gradle.kts 文件:
buildscript {

    repositories {
        google()
        jcenter()
    }

    dependencies {
        classpath("com.android.tools.build:gradle:${Versions.version_gradle}")
        classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:${Versions.version_kotlin}")
        classpath("androidx.navigation:navigation-safe-args-gradle-plugin:${Versions.version_navigation}")

        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

allprojects {
    repositories {
        google()
        jcenter()
    }
}

tasks.register<Delete>("clean") {
    delete(rootProject.buildDir)
}

我的应用程序 build.gradle.kts 文件:
plugins{
    id("com.android.application")
    kotlin("android")
    kotlin("android.extensions")
    kotlin("kapt")
    id("androidx.navigation.safeargs.kotlin")
}

android {
    compileOptions {
        sourceCompatibility( JavaVersion.VERSION_1_8)
        targetCompatibility( JavaVersion.VERSION_1_8)
    }

    kotlinOptions {
        jvmTarget("1.8")
    }
    compileSdkVersion(29)
    defaultConfig {
        applicationId = "com.example.android.trackmysleepquality"
        minSdkVersion(19)
        targetSdkVersion(29)
        versionCode = 1
        versionName = "1.0"
        testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
        vectorDrawables.useSupportLibrary = true
        javaCompileOptions {
            annotationProcessorOptions {
                arguments = mapOf("room.incremental" to "true")
            }
        }
    }
    buildTypes {
        getByName("release") {
            isMinifyEnabled = false
            proguardFiles(getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro")
        }
    }

    // Enables data binding.
    dataBinding {
        enabled = true
    }

}

dependencies {
    implementation(fileTree(mapOf("dir" to "libs"), "include:" to listOf("*.jar")))
    implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk7:${Versions.version_kotlin}")

    // Support libraries
    implementation("androidx.constraintlayout:constraintlayout:${Versions.version_constraint_layout}")

    // Android KTX
    implementation("androidx.core:core-ktx:${Versions.version_core}")

    // Room and Lifecycle dependencies
    implementation("androidx.room:room-runtime:${Versions.version_room}")
    implementation("androidx.room:room-ktx:${Versions.version_room}")
    kapt("androidx.room:room-compiler:${Versions.version_room}")
    implementation("androidx.lifecycle:lifecycle-extensions:${Versions.version_lifecycle_extensions}")
    implementation("com.github.hadilq.liveevent:liveevent:1.0.1")

    // Coroutines
    implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:${Versions.version_coroutine}")
    implementation("org.jetbrains.kotlinx:kotlinx-coroutines-android:${Versions.version_coroutine}")

    // Navigation
    implementation("androidx.navigation:navigation-fragment-ktx:${Versions.version_navigation}")
    implementation("androidx.navigation:navigation-ui-ktx:${Versions.version_navigation}")

    // Testing
    testImplementation("junit:junit:4.12")
    androidTestImplementation("androidx.test.ext:junit:1.1.1")
    androidTestImplementation("androidx.arch.core:core-testing:2.1.0")
    androidTestImplementation("androidx.test.espresso:espresso-core:3.2.0")
    androidTestImplementation("org.mockito:mockito-core:3.1.0")
}

最佳答案

我终于找到了解决方案。我刚刚删除了我的用户文件夹中的整个 .gradle 目录,我认为这会使 Android Studio 可能为 Kotlin dsl 的访问器所做的所有缓存无效。所以,最后,它确实有效

关于android - 尝试将 Android Gradle 项目从 Groovy 迁移到 Kotlin 时出现 CacheOpenException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59229721/

相关文章:

java - 根据处理程序恢复和暂停计时器

java - Kotlin 文件到 kotlin 类

java - 通过注释映射实体的 Hibernate Search 的替代方案

android - 为特定模块或依赖项禁用 android.enableJetifier

java - Android连续tcp轮询

带有 https 和凭据的 android fileupload

android - 在 Android Studio 中打开整个模块文件树

spring - 如何解决错误: Spring 退出值非零为1?

Android Parse SDK - 保护凭据

android - 使用 textview 和 listview 的抽屉导航