Search code examples
bazelbazel-javabazel-query

Query for Java toolchain details in Bazel


I'd like to use bazel query to get more details about the Java toolchain. Specifically Java source level to be used.

From the java_library target I was able to query for the Java toolchain:

  rule_input: "@bazel_tools//tools/jdk:current_java_toolchain"
  rule_input: "@bazel_tools//tools/jdk:java_plugins_flag_alias"
  rule_input: "@bazel_tools//tools/jdk:proguard_whitelister"
  rule_input: "@bazel_tools//tools/jdk:toolchain_type"

What query can I use to get the source level the target is using?

I tried bazel query "@bazel_tools//tools/jdk:current_java_toolchain" --output=proto but the output doesn't seem to contain that information.


Solution

  • Your task lies fundamentally outside the capabilities of query because the Java toolchain is not selected until after loading, the phase query operates on. (In particular, query cannot consider --java_language_version or other command line flags.) However, cquery can accomplish the task:

    $ bazel cquery "@bazel_tools//tools/jdk:current_java_toolchain" --output starlark --starlark:expr 'providers(target)["JavaToolchainInfo"].source_version'
    11
    

    Keep in mind that a complex build could use multiple Java toolchains, leaving your inquiry ill-defined.