如何将compileDebugKotlin任务目标设为Java17?Expo升级遇兼容问题
Expo 50 + Gradle 8.7 下 JVM 版本兼容性报错解决
问题描述
将React Native项目从Expo 48升级到50,同时把Gradle wrapper更新至8.7后,遇到编译报错:
Execution failed for task ':expo-permissions:compileDebugKotlin'.
'compileDebugJavaWithJavac'任务(当前目标版本17)与'compileDebugKotlin'任务(当前目标版本11)的JVM目标兼容性需设置为同一Java版本。
已尝试以下方法但未解决:
- 配置Java toolchain
- 添加
org.gradle.toolchains.foojay-resolver-convention插件 - 在配置中添加
compatibilityOptions、kotlin及kotlinOptions代码块,硬编码Java版本并设置jvmToolchain(17) - 在IDE的Gradle设置中把Gradle JDK更新至17
解决方案
问题核心是expo-permissions模块自身的Gradle配置未同步使用Java 17,需要在项目根目录的android/build.gradle中添加全局配置,强制所有子模块统一JVM版本:
- 打开
android/build.gradle文件,找到allprojects代码块,添加全局配置:
allprojects { repositories { // 保留原有仓库配置 } // 强制所有Kotlin编译任务使用JVM 17 tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile).configureEach { kotlinOptions { jvmTarget = JavaVersion.VERSION_17.toString() } } // 强制所有Java编译任务使用JVM 17 tasks.withType(JavaCompile).configureEach { sourceCompatibility = JavaVersion.VERSION_17 targetCompatibility = JavaVersion.VERSION_17 } }
- 在
android/app/build.gradle中确认kotlinOptions配置:
android { // 保留原有配置 kotlinOptions { jvmTarget = JavaVersion.VERSION_17.toString() } }
- 清理缓存后重新编译:
./gradlew clean npx expo run:android
如果以上方法无效,可尝试升级expo-permissions到适配Expo 50的最新版本,或用预构建命令重置Android配置:
npx expo prebuild --clean
内容的提问来源于stack exchange,提问作者Junaid Sarwar
相关产品推荐
相关产品推荐

