许多使用 shell 脚本配置其环境的 Java 应用程序使用 JAVA_HOME
环境变量来启动正确的 Java 版本、定位 JRE JAR 等等。
在 macOS X 10.6 中,以下路径似乎对此变量有效
/Library/Java/Home
/System/Library/Frameworks/JavaVM.framework/Home
/System/Library/Frameworks/JavaVM.framework/Versions/Current
其中一些是实际当前 VM 的符号链接(如 Java 首选项窗格中所定义)。
但是应该使用哪一个——或者可以使用其中任何一个?
我只是将 JAVA_HOME
设置为该命令的输出,它应该为您提供 Java 首选项中指定的 Java 路径。这是我的 .bashrc
文件中的一个片段,它设置了这个变量:
export JAVA_HOME=$(/usr/libexec/java_home)
我没有遇到过这种技术的任何问题。
有时我必须将 JAVA_HOME
的值更改为 Java 的早期版本。例如,我正在维护的一个程序在 OS X 上需要 32 位 Java 5,因此在使用该程序时,我通过运行设置 JAVA_HOME
:
export JAVA_HOME=$(/usr/libexec/java_home -v 1.5)
对于那些在您的路径中没有 java_home
的人,请像这样添加它。
sudo ln -s /System/Library/Frameworks/JavaVM.framework/Versions/Current/Commands/java_home /usr/libexec/java_home
参考:
Oracle 解释 java_home 命令
MacOS上Spring Tool Suite(Eclipse 2019)中配置JDK的文章
此外,设置 PATH 以反映 JDK 也很有趣。添加 JAVA_HOME 后(可以通过 'mipadi' 引用的示例完成):
export JAVA_HOME=$(/usr/libexec/java_home)
在 ~/.profile 中也添加:
export PATH=${JAVA_HOME}/bin:$PATH
PS:对于 OSX,我通常在 HOME 目录中使用 .profile 而不是 .bashrc
.bash_profile
— 为什么你使用而不是通用的 .profile
?
.profile
是通用的,它将与 sh
或 bash
一起使用,而 .bash_profile
是 bash
独有的。这也将设置与使用 .bash_profile
的应用程序(如 MacPorts
)隔离开来。但是您可以安全地使用这两者中的任何一个。查看更多信息here
.bash_profile
会覆盖 .profile
。
.bash_profile
是特定的,而 .profile
是通用的,对于所有 sh
变体。
/usr/bin
中放置了指向 java
的链接,因此不需要将 $JAVA_HOME
显式添加到您的路径中。
我有 MAC OS X(Sierra) 10.12.2。
我按照以下步骤将 JAVA_HOME 设置为在 React Native(适用于 Android 应用程序)上工作。
打开终端(Command+R,输入终端,回车)。
将以下行添加到 ~/.bash_profile。导出 JAVA_HOME=$(/usr/libexec/java_home)
现在运行以下命令。源〜/ .bash_profile
您可以通过键入以下命令来检查 JAVA_HOME 的确切值。回声 $JAVA_HOME
返回的值(输出)将如下所示。 /Library/Java/JavaVirtualMachines/jdk1.8.0_131.jdk/Contents/Home
而已。
$JAVA_HOME
指的是 $(/usr/libexec/java_home)
,而 $(/usr/libexec/java_home)
在内部被系统称为 /Library/Java/JavaVirtualMachines/jdk1.8.0_131.jdk/Contents/Home
。
我在 Mac OS 10.6.8 上
对我来说最简单的解决方案就是简单地放入
$ export JAVA_HOME=$(/usr/libexec/java_home)
要测试它是否有效,请输入
$ echo $JAVA_HOME
表明
/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home
你也可以测试
$ which java
现在 Java 似乎安装在 /Library/Java/JavaVirtualMachines
我倾向于使用/Library/Java/Home
。首选项窗格的工作方式应该与您的首选版本保持同步。
以上在 YOSEMITE 中不再适用于图形应用程序!像 eclipse,或者任何从 Spotlight 开始的东西。 (.bash_profile、launchd.conf 仅适用于终端会话。)在启动 eclipse 之前,只需打开一个终端窗口,然后发出以下命令:
launchctl setenv JAVA_HOME /Library/Java/JavaVirtualMachines/jdk1.7.0_45.jdk/Contents/Home
(使用您的安装路径!也许也可以使用 $(/usr/libexec/java_home) 而不是完整路径。)
在此处查看有关永久解决方案的完整优秀文章:Setting environment variables via launchd.conf no longer works in OS X Yosemite/El Capitan/macOS Sierra?
建议在设置 JAVA_HOME 环境变量之前检查默认终端 shell,通过以下命令:
$ echo $SHELL
/bin/bash
如果您的默认终端是 /bin/bash (Bash),那么您应该使用 @hygull 方法
如果你的默认终端是 /bin/zsh (Z Shell),那么你应该在 ~/.zshenv 文件中设置这些环境变量,内容如下:
export JAVA_HOME="$(/usr/libexec/java_home)"
同样,上面未提及的任何其他终端类型,您应该在其各自的终端 env 文件中设置环境变量。
此方法在 macOS Mojave 版本 10.14.6 中进行了测试。
我发现这个 stack 有帮助,我遇到了同样的问题,我可以解决:
我的 java 路径在这里:
/Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home
并且需要放入我的 .bash_profile
:
export JAVA_HOME=\"/Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home\"
希望帮助
正如其他答案所指出的,查找 Java 主目录的正确方法是使用 /usr/libexec/java_home
。
Apple 的技术问答 QA1170:OS X 上的重要 Java 目录中提供了相关的官方文档:https://developer.apple.com/library/mac/qa/qa1170/_index.html
对我来说,maven 似乎可以处理 .mavenrc
文件:
echo "export JAVA_HOME=$(/usr/libexec/java_home -v 1.8)" > ~/.mavenrc
我确定我也是在SO上捡到它的,只是不记得在哪里。
创建文件 ~/.mavenrc
然后将其粘贴到文件中
export JAVA_HOME=$(/usr/libexec/java_home)
测试
mvn -v
由于您提到了应用程序,因此跳过了终端设置,永久系统环境变量设置(适用于 macOS Sierra;也适用于 El Capitan):
launchctl setenv JAVA_HOME $(/usr/libexec/java_home -v 1.8)
(这会将 JAVA_HOME 设置为最新的 1.8 JDK,您可能已经经历了几次更新,例如 javac 1.8.0_101、javac 1.8.0_131)当然,将 1.8 更改为 1.7 或 1.6(真的吗?)以满足您的需要和您的系统
对于 Fish Shell 用户,请使用以下内容:alias java7 "set -gx JAVA_HOME (/usr/libexec/java_home -v1.7)"
不定期副业成功案例分享