Handle java versions with a single component
Fixes https://github.com/bazelbuild/bazel/issues/13406
Closes #13407.
PiperOrigin-RevId: 370846357
diff --git a/src/test/shell/bazel/bazel_with_jdk_test.sh b/src/test/shell/bazel/bazel_with_jdk_test.sh
index 9ae19d0..03cfde3 100755
--- a/src/test/shell/bazel/bazel_with_jdk_test.sh
+++ b/src/test/shell/bazel/bazel_with_jdk_test.sh
@@ -222,6 +222,41 @@
expect_not_log "@bazel_tools//tools/jdk:runtime_toolchain_type -> toolchain @local_jdk//:jdk"
}
+# Bazel shall detect JDK version and configure it with "local_jdk_{version}" and "{version}" setting.
+function test_bazel_detects_local_jdk_version11_with_only_major() {
+ # Fake Java version 11
+ mkdir -p jdk/bin
+ touch jdk/bin/javac
+ chmod +x jdk/bin/javac
+ cat >jdk/bin/java <<EOF
+#!/bin/bash
+
+echo " Property settings:" >&2
+echo " java.version = 11 " >&2
+EOF
+ chmod +x jdk/bin/java
+ export JAVA_HOME="$PWD/jdk"
+ export PATH="$PWD/jdk/bin:$PATH"
+
+ bazel cquery \
+ --toolchain_resolution_debug=tools/jdk:runtime_toolchain_type \
+ --java_runtime_version=11 \
+ //java/main:JavaExample &>"${TEST_log}" || fail "Autodetecting a fake JDK version 11 and selecting it failed"
+ expect_log "@bazel_tools//tools/jdk:runtime_toolchain_type -> toolchain @local_jdk//:jdk"
+
+ bazel cquery \
+ --toolchain_resolution_debug=tools/jdk:runtime_toolchain_type \
+ --java_runtime_version=local_jdk_11 \
+ //java/main:JavaExample &>"${TEST_log}" || fail "Autodetecting a fake JDK version 11 and selecting it failed"
+ expect_log "@bazel_tools//tools/jdk:runtime_toolchain_type -> toolchain @local_jdk//:jdk"
+
+ bazel cquery \
+ --toolchain_resolution_debug=tools/jdk:runtime_toolchain_type \
+ --java_runtime_version=15 \
+ //java/main:JavaExample &>"${TEST_log}" || fail "Autodetecting a fake JDK version 11 and selecting it failed"
+ expect_not_log "@bazel_tools//tools/jdk:runtime_toolchain_type -> toolchain @local_jdk//:jdk"
+}
+
# Failure to detect JDK version shall be handled gracefully.
function test_bazel_gracefully_handles_unknown_java() {
# Fake Java version 11
diff --git a/tools/jdk/local_java_repository.bzl b/tools/jdk/local_java_repository.bzl
index 90f4547..f2a7edb 100644
--- a/tools/jdk/local_java_repository.bzl
+++ b/tools/jdk/local_java_repository.bzl
@@ -29,9 +29,12 @@
return None
version_value = version_property[0][len("java.version = "):]
- (major, minor, rest) = version_value.split(".", 2)
-
- if major == "1": # handles versions below 1.8
+ parts = version_value.split(".")
+ major = parts[0]
+ if len(parts) == 1:
+ return major
+ elif major == "1": # handles versions below 1.8
+ minor = parts[1]
return minor
return major