rules_jvm
rules_jvm copied to clipboard
Fetching dependencies for JUnit5 runner tries to use local java
I have a simple project that uses Bazel 6.3 and bzlmod:
bazel_dep(name = "bazel_skylib", version = "1.4.1")
bazel_dep(name = "rules_jvm_external", version = "5.3")
bazel_dep(name = "contrib_rules_jvm", version = "0.13.0")
# Maven
maven = use_extension("@rules_jvm_external//:extensions.bzl", "maven")
maven.install(
artifacts = [
# Null-check annotations
"com.google.code.findbugs:jsr305:3.0.2",
# Record Builders
"io.soabase.record-builder:record-builder-core:37",
"io.soabase.record-builder:record-builder-processor:37",
# JUnit 5
"org.junit.jupiter:junit-jupiter-api:5.10.0",
"org.junit.jupiter:junit-jupiter-params:5.10.0",
"org.junit.jupiter:junit-jupiter-engine:5.10.0",
"org.junit.platform:junit-platform-console:1.10.0",
"org.junit.platform:junit-platform-launcher:1.10.0",
"org.junit.platform:junit-platform-reporting:1.10.0",
"org.assertj:assertj-core:3.11.1",
],
lock_file = "//:maven_install.json",
)
use_repo(maven, "maven", "unpinned_maven")
In my .bazelrc
I'm passing the following options:
--host_jvm_args=-DBAZEL_TRACK_SOURCE_DIRECTORIES=1
Inherited 'common' options: --isatty=0 --terminal_columns=80
Inherited 'common' options: --enable_platform_specific_config --heap_dump_on_oom
Inherited 'common' options: --java_language_version=17 --java_runtime_version=remotejdk_17 --tool_java_language_version=17 --tool_java_runtime_version=remotejdk_17
Inherited 'common' options: --enable_bzlmod --@aspect_rules_ts//ts:skipLibCheck=honor_tsconfig
'build' options: --noexperimental_check_external_repository_files --reuse_sandbox_directories --noexperimental_action_cache_store_output_metadata
'build' options: --keep_going --show_result=20
'build' options: --noremote_upload_local_results --sandbox_default_allow_network=false --incompatible_strict_action_env --experimental_allow_tags_propagation --incompatible_default_to_explicit_init_py
'build' options: --noexperimental_check_output_files --incompatible_remote_results_ignore_disk --reuse_sandbox_directories --nolegacy_external_runfiles --modify_execution_info=PackageTar=+no-remote
'build' options: --enable_runfiles
'build' options: --announce_rc --show_timestamps --show_progress_rate_limit=60 --curses=no --color=yes --terminal_columns=120
Note the 'remotejdk_17' for both 'java_runtime_version' and 'tool_java_runtime_version'. The build succeeds locally where I have a JDK installed, but on a CI worker that has not default JDK, it fails with the following errors:
(09:03:59) ERROR: /home/runner/.cache/bazel/_bazel_runner/e6da7a7eb18341b583e9a02b4c4359f9/external/contrib_rules_jvm~0.13.0/java/src/com/github/bazel_contrib/contrib_rules_jvm/junit5/BUILD.bazel:44:13: @contrib_rules_jvm~0.13.0//java/src/com/github/bazel_contrib/contrib_rules_jvm/junit5:junit5-compile depends on @rules_jvm_external~5.3~maven~contrib_rules_jvm_deps//:org_junit_platform_junit_platform_commons in repository @rules_jvm_external~5.3~maven~contrib_rules_jvm_deps which failed to fetch. no such package '@rules_jvm_external~5.3~maven~contrib_rules_jvm_deps//': Unable to run coursier: /home/runner/.cache/bazel/_bazel_runner/e6da7a7eb18341b583e9a02b4c4359f9/external/rules_jvm_external~5.3~maven~contrib_rules_jvm_deps/coursier: 26: exec: java: not found
Same error repeats for other JUnit dependencies. AFAIK, this is the internal dependencies of rules_jvm that we are trying to fetch, but somewhere along the line the JDK toolchain is no longer remote.
Is this a bug, or am I doing something wrong? Can I somehow pass the correct toolchain to rules_jvm to use?
Same problem here in google/or-tools
, we have to stick with v0.9.0
, (and rules_jvm_external==5.2
) to use JUNIT 5...
Currently we are using this in our WORKSPACE
:
# Bazel Extensions
## Bazel Skylib rules.
git_repository(
name = "bazel_skylib",
tag = "1.4.2",
remote = "https://github.com/bazelbuild/bazel-skylib.git",
)
load("@bazel_skylib//:workspace.bzl", "bazel_skylib_workspace")
bazel_skylib_workspace()
...
git_repository(
name = "rules_java",
tag = "6.4.0",
#tag = "6.5.1",
remote = "https://github.com/bazelbuild/rules_java.git",
)
git_repository(
name = "rules_jvm_external",
tag = "5.2",
#tag = "5.3",
remote = "https://github.com/bazelbuild/rules_jvm_external.git",
)
git_repository(
name = "contrib_rules_jvm",
tag = "v0.9.0",
#tag = "v0.19.0",
remote = "https://github.com/bazel-contrib/rules_jvm.git",
)
...
## Java support (with junit 5)
load("@rules_java//java:repositories.bzl", "rules_java_dependencies", "rules_java_toolchains")
rules_java_dependencies()
rules_java_toolchains()
load("@rules_jvm_external//:repositories.bzl", "rules_jvm_external_deps")
rules_jvm_external_deps()
load("@rules_jvm_external//:setup.bzl", "rules_jvm_external_setup")
rules_jvm_external_setup()
JUNIT_PLATFORM_VERSION = "1.9.2"
JUNIT_JUPITER_VERSION = "5.9.2"
load("@rules_jvm_external//:defs.bzl", "maven_install")
maven_install(
artifacts = [
"net.java.dev.jna:jna:aar:5.13.0",
"com.google.truth:truth:0.32",
"org.junit.platform:junit-platform-launcher:%s" % JUNIT_PLATFORM_VERSION,
"org.junit.platform:junit-platform-reporting:%s" % JUNIT_PLATFORM_VERSION,
"org.junit.jupiter:junit-jupiter-api:%s" % JUNIT_JUPITER_VERSION,
"org.junit.jupiter:junit-jupiter-params:%s" % JUNIT_JUPITER_VERSION,
"org.junit.jupiter:junit-jupiter-engine:%s" % JUNIT_JUPITER_VERSION,
],
repositories = [
"https://repo1.maven.org/maven2",
],
)
load("@contrib_rules_jvm//:repositories.bzl", "contrib_rules_jvm_deps")
contrib_rules_jvm_deps()
load("@contrib_rules_jvm//:setup.bzl", "contrib_rules_jvm_setup")
contrib_rules_jvm_setup()
src: https://github.com/google/or-tools/blob/main/WORKSPACE