You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Lombok1.18.30搭配Java17/21编译时IllegalAccessError问题求助

问题

编译Gradle项目时遇到以下错误:

java.lang.IllegalAccessError: class lombok.javac.apt.LombokProcessor (in unnamed module @0x44492a8a) cannot access class com.sun.tools.javac.processing.JavacProcessingEnvironment (in module jdk.compiler) because module jdk.compiler does not export com.sun.tools.javac.processing to unnamed module @0x44492a8a

已知早期Lombok版本出现该问题时升级即可解决,但已使用最新的Lombok 1.18.30仍存在此问题。尝试过Java 21、Java 17版本均报错,仅Java 8可正常运行;测试多个Gradle版本,仅Gradle 8.5宣称兼容Java 21。

补充的build.gradle相关配置:

compileOnly('org.projectlombok:lombok:1.18.30')
apply plugin: 'io.franzbecker.gradle-lombok'

import io.franzbecker.gradle.lombok.task.DelombokTask

task delombok(type: DelombokTask, dependsOn: compileJava) {
    ext.outputDir = file("$buildDir/delombok")
    outputs.dir(outputDir)
    sourceSets.main.java.srcDirs.each {
        inputs.dir(it)
        args(it, "-d", outputDir)
    }
    doFirst {
        outputDir.deleteDir()
    }
}
解决方案

1. 替换为官方维护的Lombok Gradle插件

当前使用的io.franzbecker.gradle-lombok插件已停止维护,对Java 17+的模块系统支持不足。改用官方推荐的io.freefair.lombok插件:

  • 删除原有插件的apply plugin: 'io.franzbecker.gradle-lombok'配置
  • 添加官方插件配置(适配Gradle 7.0+):
plugins {
    id 'io.freefair.lombok' version '8.6' // 8.6版本兼容Gradle 8.5,可按需调整
}
  • 保留compileOnly 'org.projectlombok:lombok:1.18.30',或升级到Lombok最新稳定版(如1.18.32)提升Java 21适配性

2. 调整Delombok任务配置

官方插件已内置Delombok功能,无需自定义任务,直接使用插件提供的delombok任务即可。若需自定义,参考以下配置:

tasks.withType(DelombokTask) {
    outputDir = file("$buildDir/delombok")
    sourceSets.main.java.srcDirs.each {
        inputs.dir(it)
        args(it, "-d", outputDir)
    }
    doFirst {
        outputDir.deleteDir()
    }
}

注意移除任务对compileJava的依赖,避免编译顺序冲突。

3. 添加JVM参数适配模块系统(备选方案)

若暂时无法替换插件,可在Gradle配置中添加JVM参数,允许Lombok访问jdk.compiler模块的内部API:
在build.gradle中给Java编译任务添加参数:

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'
    ]
}

同时给自定义的Delombok任务添加相同参数:

task delombok(type: DelombokTask, dependsOn: compileJava) {
    // 保留原有配置
    jvmArgs += [
        '--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'
    ]
}

4. 确认版本兼容性

确保Gradle与Java版本完全匹配:

  • Java 17需搭配Gradle 7.3及以上版本
  • Java 21必须使用Gradle 8.3及以上版本,当前使用的Gradle 8.5符合要求,但需排查项目中是否存在其他旧插件或配置冲突

内容的提问来源于stack exchange,提问作者mightypants

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 23:00:31