diff options
author | Chris Heisterkamp <cheister@squareup.com> | 2017-11-13 04:08:28 -0800 |
---|---|---|
committer | Copybara-Service <copybara-piper@google.com> | 2017-11-13 04:10:52 -0800 |
commit | c0b25e9ecfe0c3eceb63d69547df37f9f1327fd0 (patch) | |
tree | 9680139baffa550985d1ca7d1a1e729f36e318c2 /src/main | |
parent | b874b8edbb7af4787be5363fac4dcbc24e74ed6f (diff) |
Update java check in StartupOptions::GetJvm() to work with java9
If you have java 9 installed but JAVA_HOME is set to java 8 then some bazel tests will fail because the check for java cannot find rt.jar which no longer exists in java 9.
e.g.
on OSX 10.13
```
> java -version
java version "1.8.0_144"
Java(TM) SE Runtime Environment (build 1.8.0_144-b01)
Java HotSpot(TM) 64-Bit Server VM (build 25.144-b01, mixed mode)
> JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_144.jdk/Contents/Home bazel test //src/test/py/bazel:action_temp_test
```
will fail with the following
```
FAIL: testLinuxOrDarwinSandboxedBuildAction (__main__.ActionTempTest)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/private/var/tmp/_bazel_cheister/08d5287ffe0da9d62c01970651a9400e/bazel-sandbox/7165594205799114739/execroot/io_bazel/bazel-out/local-fastbuild/bin/src/test/py/bazel/action_temp_test.runfiles/io_bazel/src/test/py/bazel/action_temp_test.py", line 30, in testLinuxOrDarwinSandboxedBuildAction
self.AssertTempEnvvarWithSpawnStrategy('sandboxed')
File "/private/var/tmp/_bazel_cheister/08d5287ffe0da9d62c01970651a9400e/bazel-sandbox/7165594205799114739/execroot/io_bazel/bazel-out/local-fastbuild/bin/src/test/py/bazel/action_temp_test.runfiles/io_bazel/src/test/py/bazel/action_temp_test.py", line 39, in AssertTempEnvvarWithSpawnStrategy
strategies = self._SpawnStrategies()
File "/private/var/tmp/_bazel_cheister/08d5287ffe0da9d62c01970651a9400e/bazel-sandbox/7165594205799114739/execroot/io_bazel/bazel-out/local-fastbuild/bin/src/test/py/bazel/action_temp_test.runfiles/io_bazel/src/test/py/bazel/action_temp_test.py", line 124, in _SpawnStrategies
self.AssertExitCode(exit_code, 2, stderr)
File "/private/var/tmp/_bazel_cheister/08d5287ffe0da9d62c01970651a9400e/bazel-sandbox/7165594205799114739/execroot/io_bazel/bazel-out/local-fastbuild/bin/src/test/py/bazel/action_temp_test.runfiles/io_bazel/src/test/py/bazel/test_base.py", line 68, in AssertExitCode
'(end stderr)------------------------------------------',
AssertionError: Bazel exited with 1 (expected 2), stderr:
(start stderr)----------------------------------------
INFO: $TEST_TMPDIR defined: output root default is '/private/var/tmp/_bazel_cheister/08d5287ffe0da9d62c01970651a9400e/bazel-sandbox/7165594205799114739/execroot/io_bazel/_tmp/30efe0ec7addffc49fb72b5d5aa45572' and max_idle_secs default is '15'.
Extracting Bazel installation...
Problem with java installation: couldn't find/access rt.jar in /Library/Java/JavaVirtualMachines/jdk-9.jdk/Contents/Home
(end stderr)------------------------------------------
```
This is related to https://github.com/bazelbuild/bazel/issues/428 but really only fixes the case where you are still using java8 but happen to have java9 installed.
Closes #4045.
PiperOrigin-RevId: 175513188
Diffstat (limited to 'src/main')
-rw-r--r-- | src/main/cpp/startup_options.cc | 13 |
1 files changed, 10 insertions, 3 deletions
diff --git a/src/main/cpp/startup_options.cc b/src/main/cpp/startup_options.cc index 23ce3e5d3c..629ef45858 100644 --- a/src/main/cpp/startup_options.cc +++ b/src/main/cpp/startup_options.cc @@ -469,12 +469,19 @@ string StartupOptions::GetJvm() { string jdk_rt_jar = blaze_util::JoinPath(GetHostJavabase(), "jre/lib/rt.jar"); // If just the JRE is installed string jre_rt_jar = blaze_util::JoinPath(GetHostJavabase(), "lib/rt.jar"); + // rt.jar does not exist in java 9+ so check for java instead + string jre_java = blaze_util::JoinPath(GetHostJavabase(), "bin/java"); + string jre_java_exe = blaze_util::JoinPath(GetHostJavabase(), "bin/java.exe"); if (blaze_util::CanReadFile(jdk_rt_jar) || - blaze_util::CanReadFile(jre_rt_jar)) { + blaze_util::CanReadFile(jre_rt_jar) || + blaze_util::CanReadFile(jre_java) || + blaze_util::CanReadFile(jre_java_exe)) { return java_program; } - fprintf(stderr, "Problem with java installation: " - "couldn't find/access rt.jar in %s\n", GetHostJavabase().c_str()); + fprintf(stderr, + "Problem with java installation: " + "couldn't find/access rt.jar or java in %s\n", + GetHostJavabase().c_str()); exit(1); } |