使用Gradle 7.5.1编译Cordova项目遇Lint错误,是否需降级Java?
问题:执行Gradle构建Cordova项目时出现
:app:lint基础设施错误,是否需要降级Java版本? 执行gradle build --warning-mode all --stacktrace编译Cordova项目时,核心错误为:app:lint任务执行失败,提示‘Lint infrastructure error’,堆栈跟踪如下:
* What went wrong: Execution failed for task ':app:lint'. > Lint infrastructure error Caused by: java.lang.reflect.InvocationTargetException at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:116) at java.base/java.lang.reflect.Method.invoke(Method.java:577) at com.android.tools.lint.gradle.api.ReflectiveLintRunner.runLint(ReflectiveLintRunner.kt:37) at com.android.build.gradle.tasks.LintBaseTask.runLint(LintBaseTask.java:133) at com.android.build.gradle.tasks.LintGlobalTask.doTaskAction(LintGlobalTask.java:37) at com.android.build.gradle.internal.tasks.NonIncrementalGlobalTask$taskAction$$inlined$recordTaskAction$1.invoke(BaseTask.kt:63) at com.android.build.gradle.internal.tasks.Blocks.recordSpan(Blocks.java:51) at com.android.build.gradle.internal.tasks.NonIncrementalGlobalTask.taskAction(NonIncrementalTask.kt:90)
当前环境版本信息
java -version java version "18.0.2.1" 2022-08-18 Java(TM) SE Runtime Environment (build 18.0.2.1+1-1) Java HotSpot(TM) 64-Bit Server VM (build 18.0.2.1+1-1, mixed mode, sharing) cordova -v 11.0.0 cordova platform ls Installed platforms: .gradle broken android 10.1.2 electron 3.1.0
Gradle配置
org.gradle.jvmargs=-Xmx1536M --add-exports=java.base/sun.nio.ch=ALL-UNNAMED --add-opens=java.base/java.lang=ALL-UNNAMED --add-opens=java.base/java.lang.reflect=ALL-UNNAMED --add-opens=java.base/java.io=ALL-UNNAMED --add-exports=jdk.unsupported/sun.misc=ALL-UNNAMED android.useAndroidX=true android.enableJetifier=true kotlin.code.style=official
Gradle Wrapper配置:distributionUrl=https\://services.gradle.org/distributions/gradle-7.5.1-bin.zip
解答
是的,你需要降级Java版本来解决这个问题。原因如下:
- Cordova Android 10.1.2对应的Android Gradle插件版本(通常为7.0.x系列)与Gradle 7.5.1,官方支持的Java版本是Java 11。Java 18属于较新的非LTS版本,在反射调用和模块访问控制逻辑上,和旧版Android构建工具存在兼容性冲突,这正是触发
InvocationTargetException导致lint基础设施错误的核心原因。
除了降级Java版本到11,你还可以尝试以下临时方案(但优先推荐Java版本降级):
临时禁用lint任务:在项目根目录的
build.gradle中添加配置跳过lint检查:android { lintOptions { checkReleaseBuilds false abortOnError false } }或者构建时直接跳过lint任务:
gradle build --warning-mode all --stacktrace -x :app:lint修复损坏的
.gradle目录:当前环境显示.gradle broken,可以删除项目根目录和用户目录下的.gradle缓存文件夹,重新执行构建。
优先建议安装Java 11(LTS版本),通过环境变量切换到该版本后重新构建,这是最彻底且符合官方规范的解决方式。
内容的提问来源于stack exchange,提问作者Ben
相关产品推荐
相关产品推荐

