Kapt到KSP迁移错误



当我尝试使用kapt迁移一个android项目到KSP时,我得到一个错误消息。

错误消息

Unable to find method ''void org.jetbrains.kotlin.gradle.tasks.KotlinCompile.<init>(org.jetbrains.kotlin.gradle.dsl.KotlinJvmOptions)''
'void org.jetbrains.kotlin.gradle.tasks.KotlinCompile.<init>(org.jetbrains.kotlin.gradle.dsl.KotlinJvmOptions)'
Gradle's dependency cache may be corrupt (this sometimes occurs after a network connection timeout.)
Re-download dependencies and sync project (requires network)
The state of a Gradle build process (daemon) may be corrupt. Stopping all Gradle daemons may solve this problem.
Stop Gradle build processes (requires restart)
Your project may be using a third-party plugin which is not compatible with the other plugins in the project or the version of Gradle requested by the project.
In the case of corrupt Gradle processes, you can also try closing the IDE and then killing all Java processes.

当前,以下库正在使用kapt

  1. 苎麻
  2. 房间

build.gradle

plugins {
id "com.android.application"
id "kotlin-android"
id "kotlin-kapt"
id "dagger.hilt.android.plugin"
id "com.google.devtools.ksp" version "1.6.10-1.0.4"
}
dependencies {
// Hilt
implementation "com.google.dagger:hilt-android:$rootProject.hiltVersion"
kapt "com.google.dagger:hilt-compiler:$rootProject.hiltVersion"
implementation "androidx.hilt:hilt-lifecycle-viewmodel:$rootProject.hiltLifecycleViewModelVersion"
kapt "androidx.hilt:hilt-compiler:$rootProject.hiltCompilerVersion"
// KSP
// implementation "com.google.devtools.ksp:symbol-processing-api:1.6.10-1.0.4"
// Moshi
implementation "com.squareup.moshi:moshi:$rootProject.moshiVersion"
implementation "com.squareup.moshi:moshi-kotlin:$rootProject.moshiKotlinVersion"
kapt "com.squareup.moshi:moshi-kotlin-codegen:$rootProject.moshiKotlinCodegenVersion"
// ksp "com.squareup.moshi:moshi-kotlin-codegen:1.13.0"
// Room
implementation "androidx.room:room-runtime:$rootProject.roomVersion"
implementation "androidx.room:room-ktx:$rootProject.roomVersion"
annotationProcessor "androidx.room:room-compiler:$rootProject.roomVersion"
ksp "androidx.room:room-compiler:$rootProject.roomVersion"
androidTestImplementation "androidx.room:room-testing:$rootProject.roomVersion"
}

有关更多详细信息,仓库托管在这里- https://github.com/Abhimanyu14/finance-manager

正如问题中提到的,我正在使用以下使用kapt的库。

  1. 苎麻
  2. 房间

从KSP文档中,我发现Hilt还不支持。(截至2022年6月25日)。

所以,我需要在我的项目中使用kapthilt


下面的build.gradle这样做,

plugins {
id "kotlin-kapt"
id "dagger.hilt.android.plugin"
id "com.google.devtools.ksp" version "1.6.21-1.0.6"
}
// Hilt
implementation "com.google.dagger:hilt-android:$rootProject.hiltVersion"
kapt "com.google.dagger:hilt-compiler:$rootProject.hiltVersion"
//ksp "com.google.dagger:hilt-compiler:$rootProject.hiltVersion"
implementation "androidx.hilt:hilt-lifecycle-viewmodel:$rootProject.hiltLifecycleViewModelVersion"
kapt "androidx.hilt:hilt-compiler:$rootProject.hiltCompilerVersion"
// ksp "androidx.hilt:hilt-compiler:$rootProject.hiltCompilerVersion"
// KSP
implementation "com.google.devtools.ksp:symbol-processing-api:1.6.21-1.0.6"
// Moshi
implementation "com.squareup.moshi:moshi:$rootProject.moshiVersion"
implementation "com.squareup.moshi:moshi-kotlin:$rootProject.moshiKotlinVersion"
// kapt "com.squareup.moshi:moshi-kotlin-codegen:$rootProject.moshiKotlinCodegenVersion"
ksp "com.squareup.moshi:moshi-kotlin-codegen:1.13.0"preferences:$rootProject.datastorePreferencesVersion"
// Room
implementation "androidx.room:room-runtime:$rootProject.roomVersion"
implementation "androidx.room:room-ktx:$rootProject.roomVersion"
annotationProcessor "androidx.room:room-compiler:$rootProject.roomVersion"
// kapt "androidx.room:room-compiler:$rootProject.roomVersion"
ksp "androidx.room:room-compiler:$rootProject.roomVersion"
androidTestImplementation "androidx.room:room-testing:$rootProject.roomVersion"

库版本

roomVersion = "2.5.0-alpha02"
moshiVersion = "1.13.0"
hiltVersion = "2.42"
hiltPluginVersion = "2.40.1"
hiltLifecycleViewModelVersion = "1.0.0-alpha03"
hiltCompilerVersion = "1.0.0"

也遇到了这个错误- Room - Schema导出目录没有提供给注释处理器,所以我们不能导出Schema

这个解决方案帮助- https://stackoverflow.com/a/71451314/9636037

ksp {
arg('room.schemaLocation', "$projectDir/schemas")
}

我也有同样的问题,似乎柄还不支持KSP,所以把它包含在你的gradle文件

plugin {
...
id "kotlin-kapt"
...
}

和替换

ksp 'com.google.dagger:hilt-compiler:2.44'

kapt 'com.google.dagger:hilt-compiler:2.44'

它在我的情况下工作:)

最新更新