Bazel rules for generating java sources and libraries from avro schemas
To use the Avro rules, add the following to your projects WORKSPACE
file
# rules_avro depends on rules_jvm_external: https://github.com/bazelbuild/rules_jvm_external
load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")
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(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(name, srcs, strings, encoding)
Same as above except
- instead of
avro_tools
, provideavro_libs
as 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_library
rules.