From f6e21bb78eb9805f9c1928662bacacf236eebe8b Mon Sep 17 00:00:00 2001 From: Anatolii Kmetiuk Date: Sat, 26 Sep 2026 03:30:25 +0900 Subject: [PATCH] [2.0.x] fix: Honor JAVA_HOME in the Unix launcher (#9825) Problem: The Unix launcher ignores JAVA_HOME and selects Java from PATH when JAVACMD is absent. Solution: Check JAVA_HOME/bin/java before falling back to PATH while preserving explicit --java-home and JAVACMD precedence. Fixes #9794 --- .../integration-test/src/test/scala/ShellScriptUtil.scala | 1 + sbt | 6 ++++++ 2 files changed, 7 insertions(+) diff --git a/launcher-package/integration-test/src/test/scala/ShellScriptUtil.scala b/launcher-package/integration-test/src/test/scala/ShellScriptUtil.scala index 90911e925..a5c23c016 100644 --- a/launcher-package/integration-test/src/test/scala/ShellScriptUtil.scala +++ b/launcher-package/integration-test/src/test/scala/ShellScriptUtil.scala @@ -186,6 +186,7 @@ trait ShellScriptUtil extends BasicTestSuite { if (isWindows) envVars("JAVACMD") = new File(javaBinDir, "java").getAbsolutePath() else + envVars("JAVACMD") = new File(javaBinDir, "java").getAbsolutePath() envVars("PATH") = javaBinDir + File.pathSeparator + path val cmd = LauncherTestHelper.launcherCommand(testSbtScript.getAbsolutePath) ++ args diff --git a/sbt b/sbt index 79bca0cf6..b64ee8869 100755 --- a/sbt +++ b/sbt @@ -927,6 +927,12 @@ original_args=("$@") sbt_file_opts=() +if [[ -f "$JAVACMD" ]]; then + java_cmd="$JAVACMD" +elif [[ -n "$JAVA_HOME" && -f "$JAVA_HOME/bin/java" ]]; then + java_cmd="$JAVA_HOME/bin/java" +fi + # Pull in the machine-wide settings configuration. if [[ -f "$machine_sbt_opts_file" ]]; then sbt_file_opts+=($(loadConfigFile "$machine_sbt_opts_file"))