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)
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)
Mar*_*mon 21
我不得不sudo ln -sfn /usr/local/opt/openjdk/libexec/openjdk.jdk /Library/Java/JavaVirtualMachines/openjdk.jdk
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.jdk和sudo 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 j8、j11等。
不要忘记$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)
刷新我的个人资料。
之后就成功了。
希望这可以帮助。
| 归档时间: |
|
| 查看次数: |
4691 次 |
| 最近记录: |