Skip to content
This repository was archived by the owner on Dec 28, 2024. It is now read-only.

Commit eec013b

Browse files
committed
Make transitive deps available at runtime
1 parent c2af824 commit eec013b

15 files changed

Lines changed: 150 additions & 19 deletions

File tree

.bazelignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,5 +14,6 @@ test/workspaces/smoke_test_predeclared_outputs
1414
test/workspaces/smoke_test_java_rule_attributes
1515
test/workspaces/smoke_test_jvm_native_interfaces
1616
test/workspaces/smoke_test_toolchain_overrides
17+
test/workspaces/smoke_test_transitive_dependencies
1718
test/workspaces/graalvm/smoke_test_graalvm_native_image_rules
1819
test/workspaces/graalvm/smoke_test_remote_graalvm_repository

java/common/providers.bzl

Lines changed: 30 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,15 +3,39 @@
33

44
load("//java:providers/JavaDependencyInfo.bzl", "JavaDependencyInfo")
55

6-
def singleton_java_dependency_info(jar):
7-
'''Returns a `JavaDependencyInfo` with just the given `jar` as a CT/RT dep.
6+
def jar_list_java_dependency_info(jars):
7+
'''A `JavaDependencyInfo` with just the JAR `File` list as the CT & RT deps.
88
'''
9-
singleton_depset = depset(direct = [jar])
9+
jar_list_depset = depset(direct = jars)
1010
return JavaDependencyInfo(
11-
run_time_class_path_jars = singleton_depset,
12-
compile_time_class_path_jars = singleton_depset,
11+
compile_time_class_path_jars = jar_list_depset,
12+
run_time_class_path_jars = jar_list_depset,
1313
)
1414

15+
def make_standard_java_target_java_dependency_info(ctx, output_jar):
16+
'''A `JavaDependencyInfo` with `output_jar` at CT & transitive deps at RT.
17+
18+
Args:
19+
ctx: The `ctx` object of this Java target.
20+
output_jar: The JAR `File` created by this Java target.
21+
Return:
22+
`JavaDependencyInfo`
23+
'''
24+
deps = []
25+
for dep in ctx.attr.deps:
26+
dep_info = dep[JavaDependencyInfo]
27+
deps.append(dep_info.run_time_class_path_jars)
28+
29+
return JavaDependencyInfo(
30+
compile_time_class_path_jars = depset(direct = [output_jar]),
31+
run_time_class_path_jars = depset(
32+
direct = [output_jar],
33+
transitive = deps,
34+
),
35+
)
36+
37+
38+
1539
def make_legacy_java_info(java_compilation_info, deps):
1640
'''Makes a `JavaInfo` like the given args.
1741
@@ -23,4 +47,4 @@ def make_legacy_java_info(java_compilation_info, deps):
2347
output_jar = java_compilation_info.class_files_output_jar,
2448
compile_jar = java_compilation_info.class_files_output_jar,
2549
deps = [dep[JavaInfo] for dep in deps],
26-
)
50+
)

java/rules/java_agent.bzl

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ load("//java:toolchain_rules/java_compiler_toolchain.bzl", "JavaCompilerToolchai
99

1010
load(
1111
"//java:common/providers.bzl",
12-
"singleton_java_dependency_info",
12+
"make_standard_java_target_java_dependency_info",
1313
"make_legacy_java_info",
1414
)
1515
load("//java:common/actions/write_java_sources_args_file.bzl", "write_java_sources_args_file")
@@ -70,7 +70,7 @@ def _java_agent_impl(ctx):
7070
return [
7171
DefaultInfo(files = depset(direct = [output_jar])),
7272
compilation_info,
73-
singleton_java_dependency_info(output_jar),
73+
make_standard_java_target_java_dependency_info(ctx, output_jar),
7474
JavaAgentInfo(
7575
java_agent_jar = output_jar,
7676
premain_class = ctx.attr.premain_class,

java/rules/java_binary.bzl

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,14 +14,15 @@ load("//java:common/actions/write_java_run_script.bzl", "write_java_run_script_f
1414
load("//java:common/extract/toolchain_info.bzl", "extract_java_executable")
1515
load(
1616
"//java:common/providers.bzl",
17-
"singleton_java_dependency_info",
1817
"make_legacy_java_info",
18+
"make_standard_java_target_java_dependency_info"
1919
)
2020

2121
# NOTE(dwtj): This is very similar to `_java_test_impl()`.
2222
def _java_binary_impl(ctx):
2323
java_compilation_info = compile_and_jar_java_target(ctx)
24-
java_dependency_info = singleton_java_dependency_info(
24+
java_dependency_info = make_standard_java_target_java_dependency_info(
25+
ctx,
2526
java_compilation_info.class_files_output_jar,
2627
)
2728
java_execution_info, run_script, class_path_args_file, jvm_flags_args_file, run_time_jars = write_java_run_script_from_ctx(

java/rules/java_import.bzl

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,11 @@
22
'''
33

44
load("//java:providers/JavaDependencyInfo.bzl", "JavaDependencyInfo")
5+
load("//java:common/providers.bzl", "jar_list_java_dependency_info")
56

67
def _java_import_impl(ctx):
7-
jars_depset = depset(direct = ctx.files.jars)
88
return [
9-
JavaDependencyInfo(
10-
compile_time_class_path_jars = jars_depset,
11-
run_time_class_path_jars = jars_depset,
12-
),
9+
jar_list_java_dependency_info(ctx.files.jars),
1310
JavaInfo(
1411
# The 0-th JAR is wrapped in this `JavaInfo`. This `JavaInfo`
1512
# includes a list of exported `JavaInfo`s, one for each of the rest

java/rules/java_library.bzl

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ load("//java:common/actions/compile_and_jar_java_sources.bzl", "compile_and_jar_
1010

1111
load(
1212
"//java:common/providers.bzl",
13-
"singleton_java_dependency_info",
13+
"make_standard_java_target_java_dependency_info",
1414
"make_legacy_java_info",
1515
)
1616

@@ -21,7 +21,7 @@ def _java_library_impl(ctx):
2121
return [
2222
DefaultInfo(files = depset(direct = [output_jar])),
2323
java_compilation_info,
24-
singleton_java_dependency_info(output_jar),
24+
make_standard_java_target_java_dependency_info(ctx, output_jar),
2525
make_legacy_java_info(java_compilation_info, ctx.attr.deps),
2626
]
2727

java/rules/java_test.bzl

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,14 +13,15 @@ load("//java:common/actions/write_java_run_script.bzl", "write_java_run_script_f
1313
load("//java:common/extract/toolchain_info.bzl", "extract_java_executable")
1414
load(
1515
"//java:common/providers.bzl",
16-
"singleton_java_dependency_info",
16+
"make_standard_java_target_java_dependency_info",
1717
"make_legacy_java_info",
1818
)
1919

2020
# NOTE(dwtj): This is very similar to `_java_binary_impl()`.
2121
def _java_test_impl(ctx):
2222
java_compilation_info = compile_and_jar_java_target(ctx)
23-
java_dependency_info = singleton_java_dependency_info(
23+
java_dependency_info = make_standard_java_target_java_dependency_info(
24+
ctx,
2425
java_compilation_info.class_files_output_jar,
2526
)
2627
java_execution_info, run_script, class_path_args_file, jvm_flags_args_file, run_time_jars = write_java_run_script_from_ctx(

test/workspaces/check_all.sh

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -118,6 +118,14 @@ bazel build //...
118118
# TODO(dwtj): Consider adding some actual tests to this workspace.
119119
#bazel test //...
120120

121+
cd "$ROOT_WORKSPACE/test/workspaces/smoke_test_transitive_dependencies"
122+
bazel clean
123+
bazel test //st/simple:A
124+
if bazel build //st/simple:ThisShouldFailToCompile > /dev/null 2> /dev/null ; then
125+
echo 'ERROR: `bazel build @smoke_test_transitive_dependencies//st/simple:ThisShouldFailToCompile` passed, but it should have failed.'
126+
exit 1
127+
fi
128+
121129
cd "$ROOT_WORKSPACE/test/workspaces/graalvm/smoke_test_graalvm_native_image_rules"
122130
bazel clean
123131
bazel build //...
@@ -130,3 +138,4 @@ bazel test //...
130138

131139
echo
132140
echo "SUCCESS: All test workspace checks passed."
141+
echo
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
bazel-bin
2+
bazel-out
3+
bazel-smoke_test_transitive_dependencies
4+
bazel-testlogs
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
workspace(name = "smoke_test_transitive_dependencies")
2+
3+
local_repository(
4+
name = "dwtj_rules_java",
5+
path = "../../..",
6+
)
7+
8+
load(
9+
"@dwtj_rules_java//java:repositories.bzl",
10+
"dwtj_local_openjdk_repository",
11+
)
12+
13+
dwtj_local_openjdk_repository(
14+
name = "dwtj_local_openjdk",
15+
)
16+
17+
load("@dwtj_local_openjdk//:defs.bzl", "register_java_toolchains")
18+
19+
register_java_toolchains()

0 commit comments

Comments
 (0)