含Jetpack Compose、Dagger和Room的Kotlin应用构建报错问询
问题:Kapt访问jdk.compiler模块类失败,跨机器编译异常
同一项目部署在两台机器上,其中一台编译运行正常,另一台出现如下报错:
java.lang.IllegalAccessError: class org.jetbrains.kotlin.kapt3.base.KaptContext (in unnamed module @0x4bd6cb74) cannot access class com.sun.tools.javac.util.Context (in module jdk.compiler) because module jdk.compiler does not export com.sun.tools.javac.util to unnamed module @0x4bd6cb74
应用级build.gradle配置
plugins { id 'com.android.application' id 'kotlin-android' id 'kotlin-kapt' id 'dagger.hilt.android.plugin' } android { compileSdk 31 defaultConfig { applicationId "com.pranaydas.smartqr" minSdk 24 targetSdk 31 versionCode 1 versionName "1.0" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" vectorDrawables { useSupportLibrary true } } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' } } compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } kotlinOptions { jvmTarget = '1.8' useIR = true } buildFeatures { compose true } composeOptions { kotlinCompilerExtensionVersion compose_version kotlinCompilerVersion '1.5.21' } packagingOptions { resources { excludes += '/META-INF/{AL2.0,LGPL2.1}' } } } dependencies { implementation 'androidx.core:core-ktx:1.6.0' implementation 'androidx.appcompat:appcompat:1.3.1' implementation 'com.google.android.material:material:1.4.0' implementation "androidx.compose.ui:ui:$compose_version" implementation "androidx.compose.material:material:$compose_version" implementation "androidx.compose.ui:ui-tooling-preview:$compose_version" implementation 'androidx.lifecycle:lifecycle-runtime-ktx:2.3.1' implementation 'androidx.activity:activity-compose:1.3.1' testImplementation 'junit:junit:4.+' androidTestImplementation 'androidx.test.ext:junit:1.1.3' androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0' androidTestImplementation "androidx.compose.ui:ui-test-junit4:$compose_version" debugImplementation "androidx.compose.ui:ui-tooling:$compose_version" // Compose dependencies implementation "androidx.lifecycle:lifecycle-viewmodel-compose:2.4.0-beta01" implementation "androidx.navigation:navigation-compose:2.4.0-alpha09" implementation "androidx.compose.material:material-icons-extended:$compose_version" implementation "androidx.hilt:hilt-navigation-compose:1.0.0-alpha03" implementation "androidx.compose.runtime:runtime-livedata:$compose_version" implementation "androidx.compose.foundation:foundation:$compose_version" // Coroutines implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.5.0' implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.5.1' //Dagger - Hilt implementation "com.google.dagger:hilt-android:2.38.1" kapt "com.google.dagger:hilt-android-compiler:2.37" implementation "androidx.hilt:hilt-lifecycle-viewmodel:1.0.0-alpha03" kapt "androidx.hilt:hilt-compiler:1.0.0" // Room implementation "androidx.room:room-runtime:2.3.0" kapt "androidx.room:room-compiler:2.3.0" // Kotlin Extensions and Coroutines support for Room implementation "androidx.room:room-ktx:2.3.0" }
项目级build.gradle配置
// Top-level build file where you can add configuration options common to all sub-projects/modules. buildscript { ext { compose_version = '1.0.2' accompanist_version = '0.24.9-beta' } repositories { google() mavenCentral() } dependencies { classpath "com.android.tools.build:gradle:7.0.2" classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.5.21" classpath "com.google.dagger:hilt-android-gradle-plugin:2.38.1" // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files } } task clean(type: Delete) { delete rootProject.buildDir }
已尝试的操作
- 删除
.gradle文件夹、gradlew及gradlew.bat文件,问题未解决 - 其他项目在两台机器上均可正常运行,怀疑问题与Room数据库相关
解决方案
将依赖中所有使用kapt声明的注解处理器依赖,替换为annotationProcessor后,编译报错问题解决。
内容的提问来源于stack exchange,提问作者Pranay Das
相关产品推荐
相关产品推荐

