Skip to content

Commit 9120835

Browse files
simuonsKevinBoyette
authored andcommitted
Conditionally set -Djava.security.manager=allow for jdk >= 17 (bazel-contrib#1555)
Conditionally set -Djava.security.manager=allow for jdk >= 17 rules_scala uses SecurityManager which is deprecated and fails at runtime on jdk21+ (no replacement for this yet) Bazel's approach to solve this is conditionally add a jvm flag see bazelbuild/bazel#14502 CI builds were failing for some time because jdk was updated to 21
1 parent 5463276 commit 9120835

File tree

1 file changed

+14
-5
lines changed

1 file changed

+14
-5
lines changed

scala/private/phases/phase_write_executable.bzl

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ load(
1111
"java_bin",
1212
"java_bin_windows",
1313
"runfiles_root",
14+
"specified_java_runtime",
1415
)
1516

1617
def phase_write_executable_scalatest(ctx, p):
@@ -20,12 +21,15 @@ def phase_write_executable_scalatest(ctx, p):
2021
ctx.attr.jvm_flags,
2122
ctx.toolchains["@io_bazel_rules_scala//scala:toolchain_type"].scala_test_jvm_flags,
2223
)
24+
25+
expanded_jvm_flags = [
26+
"-DRULES_SCALA_MAIN_WS_NAME=%s" % ctx.workspace_name,
27+
"-DRULES_SCALA_ARGS_FILE=%s" % p.runfiles.args_file.short_path.replace("../", "external/"),
28+
] + expand_location(ctx, final_jvm_flags)
29+
2330
args = struct(
2431
rjars = p.coverage_runfiles.rjars,
25-
jvm_flags = [
26-
"-DRULES_SCALA_MAIN_WS_NAME=%s" % ctx.workspace_name,
27-
"-DRULES_SCALA_ARGS_FILE=%s" % p.runfiles.args_file.short_path.replace("../", "external/"),
28-
] + expand_location(ctx, final_jvm_flags),
32+
jvm_flags = _allow_security_manager(ctx, expanded_jvm_flags),
2933
use_jacoco = ctx.configuration.coverage_enabled,
3034
)
3135
return _phase_write_executable_default(ctx, p, args)
@@ -40,7 +44,7 @@ def phase_write_executable_repl(ctx, p):
4044
def phase_write_executable_junit_test(ctx, p):
4145
args = struct(
4246
rjars = p.coverage_runfiles.rjars,
43-
jvm_flags = p.jvm_flags + ctx.attr.jvm_flags,
47+
jvm_flags = _allow_security_manager(ctx, p.jvm_flags + ctx.attr.jvm_flags),
4448
main_class = "com.google.testing.junit.runner.BazelTestRunner",
4549
use_jacoco = ctx.configuration.coverage_enabled,
4650
)
@@ -182,3 +186,8 @@ def _jar_path_based_on_java_bin(ctx):
182186
java_bin_var = java_bin(ctx)
183187
jar_path = java_bin_var.rpartition("/")[0] + "/jar"
184188
return jar_path
189+
190+
def _allow_security_manager(ctx, jvm_flags):
191+
java_toolchain = ctx.toolchains["@bazel_tools//tools/jdk:toolchain_type"]
192+
java_runtime = specified_java_runtime(ctx, java_toolchain.java.java_runtime if java_toolchain else None)
193+
return jvm_flags + (["-Djava.security.manager=allow"] if java_runtime and java_runtime.version >= 17 else [])

0 commit comments

Comments
 (0)