为何执行/gradlew app:compileJava时触发java.lang.IllegalAccessError?
解决方案
1. 强制统一Lombok版本,解决旧版本残留问题
项目中存在Lombok 1.18.16版本残留,是部分依赖间接引入导致的。通过Gradle依赖约束强制使用兼容高JDK的Lombok版本(建议选1.18.22及以上,该版本开始支持JDK 16+):
在build.gradle中添加配置:
dependencies { // 强制统一Lombok版本 constraints { annotationProcessor 'org.projectlombok:lombok:1.18.30' testAnnotationProcessor 'org.projectlombok:lombok:1.18.30' compileOnly 'org.projectlombok:lombok:1.18.30' testCompileOnly 'org.projectlombok:lombok:1.18.30' } // 原有依赖配置 annotationProcessor 'org.projectlombok:lombok' testAnnotationProcessor 'org.projectlombok:lombok' compileOnly 'org.projectlombok:lombok' testCompileOnly 'org.projectlombok:lombok' // 其他依赖... }
或者用全局配置强制版本:
configurations.all { resolutionStrategy { force 'org.projectlombok:lombok:1.18.30' } }
2. 添加JVM编译参数,解决模块访问权限问题
JDK 9+的模块系统默认限制内部API访问,需给Java编译任务添加参数,允许Lombok访问jdk.compiler模块的相关内部包:
在build.gradle中添加:
tasks.withType(JavaCompile) { options.compilerArgs += [ '--add-exports', 'jdk.compiler/com.sun.tools.javac.processing=ALL-UNNAMED', '--add-exports', 'jdk.compiler/com.sun.tools.javac.code=ALL-UNNAMED', '--add-exports', 'jdk.compiler/com.sun.tools.javac.tree=ALL-UNNAMED', '--add-exports', 'jdk.compiler/com.sun.tools.javac.util=ALL-UNNAMED', '--add-opens', 'jdk.compiler/com.sun.tools.javac.processing=ALL-UNNAMED' ] }
3. 彻底清理缓存并重新构建
执行命令清理构建缓存、刷新依赖:
./gradlew clean build --refresh-dependencies
4. 检查IntelliJ配置(可选)
确保IntelliJ注解处理器启用:
- 打开
Settings > Build, Execution, Deployment > Compiler > Annotation Processors - 勾选
Enable annotation processing - 确认Lombok插件已安装并启用(
Settings > Plugins中搜索Lombok)
内容的提问来源于stack exchange,提问作者user8107351
相关产品推荐
相关产品推荐

