rules_jvm icon indicating copy to clipboard operation
rules_jvm copied to clipboard

Fetching dependencies for JUnit5 runner tries to use local java

Open lqc opened this issue 9 months ago • 1 comments

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?

lqc avatar Oct 03 '23 10:10 lqc

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

Mizux avatar Nov 20 '23 16:11 Mizux