Android Studio中ButterKnife Compiler报错求助:JDK模块权限问题
解决ButterKnife在JDK11下的模块访问权限错误
错误原因
这个报错是JDK 9+模块化机制导致的:ButterKnife编译器的ButterKnifeProcessor$RScanner类需要访问jdk.compiler模块内部的com.sun.tools.javac.tree.TreeScanner类,但JDK默认没有将这个包暴露给未命名模块(你的项目代码所在模块),触发了访问权限检查失败。
可行解决方案
方案1:添加module-info.java配置模块权限
- 在项目主源码目录(通常是
src/main/java)创建module-info.java文件 - 填入以下代码,替换占位符为你的项目信息:
module com.yourcompany.yourapp { // 替换为你的模块完整名称 requires jdk.compiler; requires butterknife.compiler; opens com.yourcompany.yourapp to butterknife.compiler; // 替换为你的项目根包路径,多个包可添加多条opens语句 }
同步Gradle后重新构建项目。
方案2:升级ButterKnife到适配JDK11的版本
ButterKnife 10.2.3及以上版本已适配JDK 9+模块化,直接升级依赖即可:
在Module级别的build.gradle中更新依赖:
dependencies { implementation 'com.jakewharton:butterknife:10.2.3' annotationProcessor 'com.jakewharton:butterknife-compiler:10.2.3' }
同步Gradle后重新构建。
方案3:添加JVM参数强制开放模块访问
如果不想修改模块声明或升级依赖,可通过JVM参数绕过权限检查:
- 打开Android Studio设置:File → Settings(Mac为Android Studio → Settings)
- 进入
Build, Execution, Deployment→Compiler→Java Compiler - 在
Additional command line parameters中添加:
--add-exports jdk.compiler/com.sun.tools.javac.tree=ALL-UNNAMED --add-exports jdk.compiler/com.sun.tools.javac.util=ALL-UNNAMED
- 点击Apply后重新构建项目。
内容的提问来源于stack exchange,提问作者Muteeb Butt
相关产品推荐
相关产品推荐

