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

使用Bazel构建时Lombok注解处理器执行失败

Bazel构建时Lombok注解处理器执行失败

我帮你分析下这个问题:你遇到的是Lombok在JDK9+模块系统下的权限访问冲突,根源在于你使用的Lombok 1.18.6版本太老,还没适配JDK9之后的模块封装机制,它的注解处理器会尝试反射访问JDK内部的受限API,而JDK默认不允许未命名模块访问这些内部类,所以抛出了InaccessibleObjectException。

先把你的问题信息整理下:

我已经通过java插件配置了Lombok,但尝试构建Bazel项目时失败,报错如下:

Caused by: java.lang.reflect.InaccessibleObjectException: Unable to
make field private
com.sun.tools.javac.processing.JavacProcessingEnvironment$DiscoveredProcessors
com.sun.tools.javac.processing.JavacProcessingEnvironment.discoveredProcs
accessible: module jdk.compiler does not "opens
com.sun.tools.javac.processing" to unnamed module @21a772cf

当前的Bazel配置如下:

java_plugin(
    name = "lombok_plugin",
    processor_class = "lombok.launch.AnnotationProcessorHider$AnnotationProcessor",
    deps = [
        "lombok-1.18.6.jar" ,
    ],
)

java_library(
    name = "worker_lib",
    srcs = glob(["**/src/main/java/**/*.java"]),
    plugins = [":lombok_plugin"],  # Apply the Lombok plugin
    deps = ["//backend/common"],
    visibility = ["//visibility:public"],
)

下面给你两个可行的解决办法:

方法一:升级Lombok版本(推荐)

从Lombok 1.18.20版本开始,官方已经适配了JDK9+的模块系统,不再依赖这些受限的内部API,能彻底解决这类权限问题。你只需要把Lombok的依赖替换成1.18.20及以上的版本,比如1.18.24:

java_plugin(
    name = "lombok_plugin",
    processor_class = "lombok.launch.AnnotationProcessorHider$AnnotationProcessor",
    deps = [
        "lombok-1.18.24.jar",  # 替换为新版本
    ],
)

升级后不需要额外添加编译参数,直接重新构建即可。

方法二:添加JVM编译参数(临时方案)

如果暂时无法升级Lombok,你可以通过给Java编译器添加--add-opens参数,开放对应的模块权限给未命名模块。你可以把参数配置在java_plugin或者java_library中:

配置在java_plugin中

java_plugin(
    name = "lombok_plugin",
    processor_class = "lombok.launch.AnnotationProcessorHider$AnnotationProcessor",
    deps = [
        "lombok-1.18.6.jar",
    ],
    javacopts = [
        "--add-opens=jdk.compiler/com.sun.tools.javac.processing=ALL-UNNAMED",
        "--add-opens=jdk.compiler/com.sun.tools.javac.code=ALL-UNNAMED",
        "--add-opens=jdk.compiler/com.sun.tools.javac.tree=ALL-UNNAMED",
        "--add-opens=jdk.compiler/com.sun.tools.javac.util=ALL-UNNAMED",
    ],
)

或者配置在java_library中

java_library(
    name = "worker_lib",
    srcs = glob(["**/src/main/java/**/*.java"]),
    plugins = [":lombok_plugin"],
    deps = ["//backend/common"],
    visibility = ["//visibility:public"],
    javacopts = [
        "--add-opens=jdk.compiler/com.sun.tools.javac.processing=ALL-UNNAMED",
        "--add-opens=jdk.compiler/com.sun.tools.javac.code=ALL-UNNAMED",
        "--add-opens=jdk.compiler/com.sun.tools.javac.tree=ALL-UNNAMED",
        "--add-opens=jdk.compiler/com.sun.tools.javac.util=ALL-UNNAMED",
    ],
)

另外还要注意,确保Bazel构建使用的JDK版本和你的Lombok版本适配,尽量避免用太老的Lombok搭配新JDK。

备注:内容来源于stack exchange,提问作者user1614862

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.17 12:09:37