Skip to content

Commit d104071

Browse files
committed
Add a module extension for registering local/remote jdks
1 parent c0462f0 commit d104071

File tree

4 files changed

+79
-0
lines changed

4 files changed

+79
-0
lines changed

java/extensions.bzl

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ load(
2323
"remote_jdk21_repos",
2424
"remote_jdk8_repos",
2525
)
26+
load("//toolchains:extensions.bzl", _java_repository = "java_repository")
2627

2728
def _toolchains_impl(module_ctx):
2829
java_tools_repos()
@@ -38,3 +39,5 @@ def _toolchains_impl(module_ctx):
3839
return None
3940

4041
toolchains = module_extension(_toolchains_impl)
42+
43+
java_repository = _java_repository

test/repo/BUILD.bazel

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,4 +53,6 @@ default_java_toolchain(
5353
name = "my_funky_toolchain",
5454
bootclasspath = ["@bazel_tools//tools/jdk:platformclasspath"],
5555
configuration = NONPREBUILT_TOOLCHAIN_CONFIGURATION,
56+
java_runtime = "@my_funky_jdk//:jdk",
57+
exec_compatible_with = ["@platforms//os:linux", "@platforms//cpu:x86_64"],
5658
)

test/repo/MODULE.bazel

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,21 @@ use_repo(
4949
"remotejdk21_win",
5050
)
5151

52+
custom_jdk = use_extension("@rules_java//java:extensions.bzl", "java_repository")
53+
custom_jdk.remote(
54+
name = "my_funky_jdk",
55+
version = "24",
56+
urls = [
57+
"https://cdn.azul.com/zulu/bin/zulu24.32.13-ca-jdk24.0.2-linux_x64.tar.gz",
58+
],
59+
strip_prefix = "zulu24.32.13-ca-jdk24.0.2-linux_x64",
60+
prefix = "funky",
61+
target_compatible_with = ["@platforms//os:linux", "@platforms//cpu:x86_64"],
62+
)
63+
use_repo(custom_jdk, "my_funky_jdk", "my_funky_jdk_toolchain_config_repo")
64+
register_toolchains("@my_funky_jdk_toolchain_config_repo//:all")
65+
5266
register_toolchains("//:all")
5367

5468
bazel_dep(name = "rules_shell", version = "0.4.0", dev_dependency = True)
69+
bazel_dep(name = "platforms", version = "0.0.11", dev_dependency = True)

toolchains/extensions.bzl

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
"""Module extensions for local and remote java repositories"""
2+
3+
load(":local_java_repository.bzl", "local_java_repository")
4+
load(":remote_java_repository.bzl", "remote_java_repository")
5+
6+
visibility(["//java"])
7+
8+
def _java_repository_impl(mctx):
9+
for mod in mctx.modules:
10+
if not mod.is_root:
11+
fail(
12+
"""This module extension may only be used in the root module. {name}
13+
must set `dev_dependency` = True on it's usage of this extension,
14+
if {name} can be dependency of other modules.""".format(name = mod.name),
15+
)
16+
for local in mod.tags.local:
17+
local_java_repository(
18+
local.name,
19+
java_home = local.java_home,
20+
version = local.version,
21+
build_file = local.build_file,
22+
build_file_content = local.build_file_content,
23+
)
24+
for remote in mod.tags.remote:
25+
remote_java_repository(
26+
remote.name,
27+
remote.version,
28+
target_compatible_with = remote.target_compatible_with,
29+
prefix = remote.prefix,
30+
sha256 = remote.sha256,
31+
strip_prefix = remote.strip_prefix,
32+
urls = remote.urls,
33+
)
34+
35+
_local = tag_class(attrs = {
36+
"name": attr.string(mandatory = True),
37+
"build_file": attr.label(default = None),
38+
"build_file_content": attr.string(default = ""),
39+
"java_home": attr.string(default = ""),
40+
"version": attr.string(default = ""),
41+
})
42+
43+
_remote = tag_class(attrs = {
44+
"name": attr.string(mandatory = True),
45+
"version": attr.string(mandatory = True),
46+
"urls": attr.string_list(mandatory = True),
47+
"prefix": attr.string(default = ""),
48+
"sha256": attr.string(default = ""),
49+
"strip_prefix": attr.string(default = ""),
50+
"target_compatible_with": attr.string_list(default = []),
51+
})
52+
53+
java_repository = module_extension(
54+
_java_repository_impl,
55+
tag_classes = {
56+
"local": _local,
57+
"remote": _remote,
58+
},
59+
)

0 commit comments

Comments
 (0)