Skip to content

set-java-home.zsh missing unset JAVA_HOME in failure branch (unlike bash version) #267

Description

@steinybot

Bug

set-java-home.zsh does not unset JAVA_HOME when asdf which java returns no valid path, unlike the bash version which handles this correctly.

set-java-home.zsh (buggy):

asdf_update_java_home() {
  local java_path
  java_path="$(asdf which java)"
  if [[ -n "${java_path}" ]]; then
    export JAVA_HOME
    JAVA_HOME="$(dirname "$(dirname "${java_path:A}")")"
    export JDK_HOME=${JAVA_HOME}
  fi
  # ← no else: JAVA_HOME is never cleared on failure
}

set-java-home.bash (correct):

_asdf_java_update_java_home() {
  local java_path
  java_path="$(asdf which java)"
  if [[ -n "${java_path}" ]]; then
    export JAVA_HOME
    JAVA_HOME="$(dirname "$(_asdf_java_absolute_dir_path "${java_path}")")"
    export JDK_HOME=${JAVA_HOME}
  else
    unset JAVA_HOME   # ← correctly cleans up
    unset JDK_HOME
  fi
}

Impact

When switching away from a project that has a java version set, or when no java version is configured at all, JAVA_HOME retains a stale or incorrect value instead of being cleared. The bash version handles this correctly and the zsh version should match.

Fix

Add the missing else branch to set-java-home.zsh:

asdf_update_java_home() {
  local java_path
  java_path="$(asdf which java)"
  if [[ -n "${java_path}" ]]; then
    export JAVA_HOME
    JAVA_HOME="$(dirname "$(dirname "${java_path:A}")")"
    export JDK_HOME=${JAVA_HOME}
  else
    unset JAVA_HOME
    unset JDK_HOME
  fi
}

Related

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions