3

我有一个看似常见的问题,但是在浏览了许多遇到无法正确设置 JAVA_HOME 路径问题的人的帖子(这里和其他地方)之后,没有提出的解决方案可以解决我的问题。

我最近通过Homebrew(版本为Java16)安装了 Java,但我需要安装Java8以用于特定IntelliJ项目。我也通过 Homewbrew 安装了 Java8,并继续安装jenv以管理我系统上现在多个版本的 Java。

IntelliJ > Project Structure中,我能够指定所需的 SDK 并在 Java8 中工作——直到这里一切都很好。

但是,我随后需要安装Java14,这一切都崩溃了。

我遵循了与添加 Java8 时相同的过程,但现在 IntelliJ在指定任何SDKERROR: JAVA_HOME is set to an invalid directory: /Users/user/.jenv/versions/system时都会抱怨。具体来说,尝试通过 gradle 构建 .jar 文件时会抛出此错误,方法是执行gradle jar

我为尝试修复所做的工作(未明确按此顺序,并且某些命令执行了多次):

jenv enable-plugin export

echo 'export PATH="$HOME/.jenv/bin:$PATH"' >> ~/.bash_profile

echo 'eval "$(jenv init -)"' >> ~/.bash_profile

jenv add $(/usr/libexec/java_home)

jenv add /Library/Java/JavaVirtualMachines/adoptopenjdk-14.jdk/Contents/Home/

jenv add /Library/Java/JavaVirtualMachines/adoptopenjdk-84.jdk/Contents/Home/

当这不起作用时,我直接从终端打开 IntelliJ,以继承bash_profile变量(我遇到过几次建议的解决方案)。

此外,我还导航到终端中的项目文件夹并发布jenv java 14以实现文件夹级规范。

以下是某些终端执行的结果,可能会提供信息:

javac -version

javac 16.0.1

java -version

openjdk version "16.0.1" 2021-04-20
OpenJDK Runtime Environment Homebrew (build 16.0.1+0)
OpenJDK 64-Bit Server VM Homebrew (build 16.0.1+0, mixed mode, sharing)

which java

/Users/jzwi/.jenv/shims/java

ls -1 /Library/Java/JavaVirtualMachines

adoptopenjdk-14.jdk
adoptopenjdk-8.jdk
openjdk.jdk

/usr/libexec/java_home -V

Matching Java Virtual Machines (4):
    16.0.1, x86_64: "OpenJDK 16.0.1"    /Library/Java/JavaVirtualMachines/openjdk.jdk/Contents/Home
    15.0.3, x86_64: "Zulu 15.32.15" /Users/user/Library/Java/JavaVirtualMachines/azul-15.0.3/Contents/Home
    14.0.2, x86_64: "AdoptOpenJDK 14"   /Library/Java/JavaVirtualMachines/adoptopenjdk-14.jdk/Contents/Home
    1.8.0_292, x86_64:  "AdoptOpenJDK 8"    /Library/Java/JavaVirtualMachines/adoptopenjdk-8.jdk/Contents/Home

echo ${JAVA_HOME}

/Users/user/.jenv/versions/system

jenv version

system (set by /Users/user/.jenv/version)

jenv versions

* system (set by /Users/user/.jenv/version)
  1.8
  1.8.0.292
  14
  14.0
  14.0.2
  16
  16.0
  16.0.1
  openjdk64-1.8.0.292
  openjdk64-14.0.2
  openjdk64-16.0.1

第一个问题是:应该echo ${JAVA_HOME}导致系统?似乎大多数教程和解释都会导致更明确的内容(例如,/Library/Java/JavaVirtualMachines/jdk1.8.0_111.jdk/Contents/Home)。

如果系统不是预期的结果,我该如何以我尚未尝试过的方式进行修复?

作为最后一条信息,这就是我.bash_profile自己拥有的信息:

eval export PATH="/Users/user/.jenv/shims:${PATH}"
export JENV_SHELL=bash
export JENV_LOADED=1
unset JAVA_HOME
source '/usr/local/Cellar/jenv/0.5.4/libexec/libexec/../completions/jenv.bash'
jenv rehash 2>/dev/null
jenv refresh-plugins
jenv() {
  typeset command
  command="$1"
  if [ "$#" -gt 0 ]; then
    shift
  fi

  case "$command" in
  enable-plugin|rehash|shell|shell-options)
    eval `jenv "sh-$command" "$@"`;;
  *)
    command jenv "$command" "$@";;
  esac
}
export PATH="$HOME/.jenv/bin:$PATH"
eval "$(jenv init -)"

unset JAVA_HOME似乎超级可疑,但我既不知道它是什么意思,也不知道它是如何到达那里的,也没有评论它解决我的问题。

非常感谢您的帮助!

4

0 回答 0