Bazel 构建中 Lombok AnnotationProcessor 故障:全面指南
2024-03-21 03:25:26
Lombok AnnotationProcessor 在 Bazel 构建中故障:全面指南
摘要
在使用 Bazel 构建 Java 项目时,Lombok AnnotationProcessor 可能会遇到问题,导致构建失败。本文将深入探讨此问题,并提供详细的解决方案。
问题概述
在 Bazel 构建中,Lombok AnnotationProcessor 可能会出现故障,并抛出以下错误:
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 构建中的 Lombok:
1. 添加 Lombok Maven 存储库
在项目根目录的 WORKSPACE
文件中,添加 Lombok Maven 存储库:
maven_jar(
name = "lombok",
artifact = "org.projectlombok:lombok:1.18.26",
sha256 = "d210c14f733048322449f41fd36778c453c63fe05725b6885689b7b0d8d1b79d",
)
2. 构建 Lombok Java 插件
创建一个新的 Bazel 构建文件(如 lombok_plugin.bzl
),用于定义 Lombok Java 插件:
load("@rules_java//java:defs.bzl", "java_plugin")
def lombok_plugin(name, processor_class):
"""Lombok Java plugin."""
java_plugin(
name = name,
processor_class = processor_class,
deps = [
"//external:lombok",
],
)
3. 在 BUILD 文件中配置 Lombok 插件
在 BUILD
文件中,使用 lombok_plugin
宏为 Java 库定义 Lombok 插件:
load("//:lombok_plugin.bzl", "lombok_plugin")
java_library(
name = "worker_lib",
srcs = glob(["**/src/main/java/** /*.java"]),
plugins = [":lombok_plugin"], # Apply the Lombok plugin
deps = ["//backend/common"],
visibility = ["//visibility:public"],
)
其他提示
- 确保使用 Java 11 或更高版本。
- 确保已安装 Bazel。
- 如果问题仍然存在,请参阅 Lombok 文档或 Bazel 社区以获取更多帮助。
结论
通过正确配置 Lombok,可以解决在 Bazel 构建中出现的 AnnotationProcessor 故障问题。本文提供了分步指南,以帮助你成功使用 Lombok。
常见问题解答
-
什么是 Lombok?
Lombok 是一种 Java 库,允许开发人员编写更简洁、更易于维护的代码,而无需编写样板代码。 -
为什么需要在 Bazel 中配置 Lombok?
Bazel 是一个构建工具,它需要明确配置才能使用外部库,如 Lombok。 -
为什么会出现 AnnotationProcessor 故障?
AnnotationProcessor 故障通常是由于 Lombok 未正确配置或 Java 版本太低。 -
除了本文提供的解决方案,还有其他解决方法吗?
其他解决方法包括在 Bazel 构建命令中添加--javacopt=-Amodules
标志,但这可能不适用于所有项目。 -
是否可以使用其他库来替代 Lombok?
可以,但 Lombok 是使用最广泛的库,并得到广泛的支持。