如何酿造安装java?

Tim*_*mer 10 java macos homebrew

我想在新的 OS X 机器上设置 java,并且更喜欢使用 brew 进行 OS X 包管理。如何使用 brew 安装最新的 java?

bat*_*her 97

作为已接受答案的附加组件:要安装某个版本的 Java,例如版本 11,请运行:

brew install openjdk@11
Run Code Online (Sandbox Code Playgroud)

并对其进行符号链接:

sudo ln -sfn /opt/homebrew/opt/openjdk@11/libexec/openjdk.jdk \
     /Library/Java/JavaVirtualMachines/openjdk-11.jdk
Run Code Online (Sandbox Code Playgroud)

  • 要对其进行符号链接,只需使用“brew link openjdk@11”即可。 (2认同)

Tim*_*mer 32

事实证明,java 最近已被转移到 brew core 中,因此截至 2021 年 1 月的正确命令是:

brew install java
Run Code Online (Sandbox Code Playgroud)

不要像我一样按照旧的说明从桶中安装,这是行不通的。您将收到来自 brew 的错误消息,如下所示:

% brew install --cask java
Error: Cask 'java' is unavailable: No Cask with this name exists.
Run Code Online (Sandbox Code Playgroud)

你可能还会看到这个:

% brew cask install java
Error: Calling brew cask install is disabled! Use brew install [--cask] instead.
Run Code Online (Sandbox Code Playgroud)

  • 我必须对 /usr/local/opt 中的目录进行符号链接,而不是 /opt/homebrew ,而我能够获得正确位置的方法是运行“brew info openjdk”并在“对于系统 Java 包装器”之后运行命令要找到这个 JDK,请使用“符号链接”,在我的例子中是“sudo ln -sfn /usr/local/opt/openjdk/libexec/openjdk.jdk /Library/Java/JavaVirtualMachines/openjdk.jdk” (42认同)
  • 如何安装较旧的 java 版本? (5认同)
  • 并且不要忘记创建符号链接:`为了让系统 Java 包装器找到此 JDK,请使用 sudo ln -sfn /opt/homebrew/opt/openjdk/libexec/openjdk.jdk /Library/Java/JavaVirtualMachines/openjdk 进行符号链接.jdk`:) (3认同)
  • 在运行 Big Sur 的 Mac 上,我必须执行以下操作: sudo ln -sfn /usr/local/Cellar/openjdk/18.0.2.1/libexec/openjdk.jdk \ /Library/Java/JavaVirtualMachines/openjdk.jdk (3认同)
  • @TimFulmer 我想我现在就是了。我设法解决了引发为期三天的牦牛剃毛事件的任何问题。它最终涉及重新安装brew、ruby、rvm、java,可能还有xcode,以及我计算机上每个奇数字节的可执行文件。谢谢你的询问!:) (2认同)

Mar*_*mon 21

我不得不sudo ln -sfn /usr/local/opt/openjdk/libexec/openjdk.jdk /Library/Java/JavaVirtualMachines/openjdk.jdk

  • `brew info java` 显示当前要运行的命令,这对我来说也是一样的 (14认同)

Joh*_*ran 13

经过多次尝试,这里有一个方法可以让我在不同版本的 OpenJDK 之间切换,并且这种方法似乎适用于 Ventura。

首先,安装所有必需的 OpenJDK 版本(对我来说,我需要 8、11、17 和 20)

brew install openjdk@8
brew install openjdk@11
brew install openjdk@17
brew install openjdk@20
Run Code Online (Sandbox Code Playgroud)

按照多个帖子中的建议更新包装器:sudo rm -f /Library/Java/JavaVirtualMachines/openjdk.jdksudo ln -sfn /usr/local/opt/openjdk/libexec/openjdk.jdk /Library/Java/JavaVirtualMachines/openjdk.jdk

更新你的.zshrc如下

alias j8="export JAVA_HOME=/usr/local/opt/openjdk@8 ; java -version"
alias j11="export JAVA_HOME=/usr/local/opt/openjdk@11 ; java -version"
alias j17="export JAVA_HOME=/usr/local/opt/openjdk@17 ; java -version"
alias j20="export JAVA_HOME=/usr/local/opt/openjdk@20 ; java -version"
Run Code Online (Sandbox Code Playgroud)

要切换版本,请运行 alias j8j11等。

不要忘记$PATH在你的~/.zshrc前面加上export PATH="/usr/local/bin:/usr/local/sbin:$PATH",否则系统 java 将有先例。

请注意,这种方法特别有用,因为我依赖它brew作为我的主要(并且可以说是最一致的)包管理器。


小智 8

根据此处的答案和如何在 macOS 上设置或更改默认 Java (JDK) 版本?

您可以使用brew安装多个Java版本,并根据需要通过命令切换版本。

例子

安装两个 Java 版本(随意更改 Java 版本):

brew install openjdk@19
brew install openjdk@8
Run Code Online (Sandbox Code Playgroud)

使用以下命令查看已安装的版本:

 /usr/libexec/java_home -V
Run Code Online (Sandbox Code Playgroud)

您应该看到响应中指定的两个版本(如果没有,请进一步阅读以创建符号链接)。现在您可以使用以下命令选择 Java 版本:

export JAVA_HOME=`/usr/libexec/java_home -v 8`
Run Code Online (Sandbox Code Playgroud)

验证所选版本:

java -version
Run Code Online (Sandbox Code Playgroud)

您可以按照附加 SOF 线程中的指定,进一步导出 shell 初始化文件中的 JAVA_HOME 变量。

现在,如果您没有/usr/libexec/java_home按预期看到 Java 版本,并且该缺失版本的版本选择不起作用,您可能需要添加一个符号链接

执行brew info openjdk@the-missing-java-version应该返回已安装版本的位置,并将指定一个符号链接命令,您应该运行该命令以使系统找到 SDK。响应文本看起来类似于:

...For the system Java wrappers to find this JDK, symlink it with
  sudo ln -sfn /opt/homebrew/opt/openjdk@17/libexec/openjdk.jdk /Library/Java/JavaVirtualMachines/openjdk-17.jdk...
Run Code Online (Sandbox Code Playgroud)


小智 5

跑步

brew reinstall openjdk
Run Code Online (Sandbox Code Playgroud)

它将显示以下内容,其中显示您的文件路径:

    For the system Java wrappers to find this JDK, symlink it with
  sudo ln -sfn /usr/local/opt/openjdk/libexec/openjdk.jdk /Library/Java/JavaVirtualMachines/openjdk.jdk

openjdk is keg-only, which means it was not symlinked into /usr/local,
because macOS provides similar software and installing this software in
parallel can cause all kinds of trouble.

If you need to have openjdk first in your PATH, run:
  echo 'export PATH="/usr/local/opt/openjdk/bin:$PATH"' >> /Users/gerarddonnelly/.bash_profile

For compilers to find openjdk you may need to set:
  export CPPFLAGS="-I/usr/local/opt/openjdk/include"
Run Code Online (Sandbox Code Playgroud)

然后我运行下面的代码,这是我从上面的输出中获取的:

sudo ln -sfn /usr/local/opt/openjdk/libexec/openjdk.jdk /Library/Java/JavaVirtualMachines/openjdk.jdk
Run Code Online (Sandbox Code Playgroud)

我遇到的另一个问题是 Elasticsearch 无法识别我的 JAVA 版本。为了解决这个问题,我将以下行添加到我的 .bash_profile 中

EXPORT JAVA_HOME=$(/usr/libexec/java_home) 
Run Code Online (Sandbox Code Playgroud)

然后我跑了

source ~/.bash_profile 
Run Code Online (Sandbox Code Playgroud)

刷新我的个人资料。

之后就成功了。

希望这可以帮助。