bazel avro rules
August 6, 2025 ยท View on GitHub
Bazel rules for generating java sources and libraries from avro schemas
Rules
Getting started
To use the Avro rules, add the following to your projects WORKSPACE file
load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")
# rules_avro depends on aspect_bazel_lib: https://github.com/bazel-contrib/bazel-lib
http_archive(
name = "aspect_bazel_lib",
sha256 = "63ae96db9b9ea3821320e4274352980387dc3218baeea0387f7cf738755d0f16",
strip_prefix = "bazel-lib-2.19.1",
url = "https://github.com/bazel-contrib/bazel-lib/releases/download/v2.19.1/bazel-lib-v2.19.1.tar.gz",
)
load("@aspect_bazel_lib//lib:repositories.bzl", "aspect_bazel_lib_dependencies", "aspect_bazel_lib_register_toolchains")
# Required bazel-lib dependencies
aspect_bazel_lib_dependencies()
# Required rules_shell dependencies
load("@rules_shell//shell:repositories.bzl", "rules_shell_dependencies", "rules_shell_toolchains")
rules_shell_dependencies()
rules_shell_toolchains()
# Register bazel-lib toolchains
aspect_bazel_lib_register_toolchains()
# Create the host platform repository transitively required by bazel-lib
load("@bazel_tools//tools/build_defs/repo:utils.bzl", "maybe")
load("@platforms//host:extension.bzl", "host_platform_repo")
maybe(
host_platform_repo,
name = "host_platform",
)
# rules_avro depends on rules_jvm_external: https://github.com/bazelbuild/rules_jvm_external
RULES_JVM_EXTERNAL_TAG = "4.1"
RULES_JVM_EXTERNAL_SHA = "f36441aa876c4f6427bfb2d1f2d723b48e9d930b62662bf723ddfb8fc80f0140"
http_archive(
name = "rules_jvm_external",
sha256 = RULES_JVM_EXTERNAL_SHA,
strip_prefix = "rules_jvm_external-%s" % RULES_JVM_EXTERNAL_TAG,
url = "https://github.com/bazelbuild/rules_jvm_external/archive/%s.zip" % RULES_JVM_EXTERNAL_TAG,
)
RULES_AVRO_VERSION = "96670d5c4a0a3e0f25f4177336e1fa94eba8be5a"
RULES_AVRO_SHA256 = "3bd69872ec72904e843762f7b3532fd1125215503a635a24f6c8037c75b299bc"
http_archive(
name = "io_bazel_rules_avro",
strip_prefix = "rules_avro-%s" % RULES_AVRO_VERSION,
url = "https://github.com/chenrui333/rules_avro/archive/%s.tar.gz" % RULES_AVRO_VERSION,
sha256 = RULES_AVRO_SHA256
)
load("@io_bazel_rules_avro//avro:avro.bzl", "avro_repositories")
avro_repositories()
# or specify a version
avro_repositories(version = "1.9.1")
Then in your BUILD file, just add the following so the rules will be available:
load("@io_bazel_rules_avro//avro:avro.bzl", "avro_gen", "avro_java_library")
avro_gen
avro_gen(name, srcs, strings, encoding)
Generates .srcjar containing generated .java source files from a collection of .avsc schemas
| Attributes | |
|---|---|
name |
Name, required
A unique name for this rule. |
srcs |
List of labels, required
List of |
strings |
Boolean, optional
use |
encoding |
String, optional
set the encoding of output files. |
avro_tools |
Label, optional
Label to the runnable Avro tools jar. Default, uses the tools jar associated with the downloaded avro version via `avro_repository` |
avro_java_library
avro_java_library(name, srcs, strings, encoding)
Same as above except
- instead of
avro_tools, provideavro_libsas a dict(core, tools) of Labels for the avro libraries.- See tests for an example the re-uses the downloaded library explicitly
- the outputs include those provided by
java_libraryrules.