许多使用shell脚本配置其环境的Java应用程序使用JAVA_HOME
环境变量来启动正确版本的Java,找到JRE JAR等等。
在OSX 10.6上,以下路径似乎对此变量
有效/Library/Java/Home
/System/Library/Frameworks/JavaVM.framework/Home
/System/Library/Frameworks/JavaVM.framework/Versions/Current
其中一些是实际当前VM的符号链接(如“Java首选项”窗格中所定义)。
但是应该使用哪一个 - 或者可以使用它们中的任何一个?
答案 0 :(得分:819)
Snow Leopard还有/usr/libexec/java_home
吗?在10.5上,我只是将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
答案 1 :(得分:35)
此外,设置PATH以反映JDK很有意思。添加JAVA_HOME后(可以使用'mipadi'引用的示例完成):
export JAVA_HOME=$(/usr/libexec/java_home)
也在〜/ .profile中添加:
export PATH=${JAVA_HOME}/bin:$PATH
P.S。:对于OSX,我通常在HOME目录中使用.profile而不是.bashrc
答案 2 :(得分:19)
我正在使用 MAC OS X(Sierra)10.12.2 。
我按照以下步骤将 JAVA_HOME 设置为 React Native (适用于Android应用)。
打开终端(Command + R,输入Terminal,按ENTER)。
将以下行添加到〜/ .bash_profile 。
export JAVA_HOME=$(/usr/libexec/java_home)
现在运行以下命令。
source ~/.bash_profile
您可以通过键入以下命令来检查 JAVA_HOME 的确切值。
echo $JAVA_HOME
返回的值(输出)如下所示。
/Library/Java/JavaVirtualMachines/jdk1.8.0_131.jdk/Contents/Home
就是这样。
答案 3 :(得分:14)
现在Java似乎安装在/Library/Java/JavaVirtualMachines
答案 4 :(得分:13)
我在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
答案 5 :(得分:9)
我倾向于使用/Library/Java/Home
。首选项窗格的工作方式应与您的首选版本保持同步。
答案 6 :(得分:8)
以上内容在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?
答案 7 :(得分:2)
我发现这个stack有帮助,我遇到了同样的问题,我可以解决这个问题:
我的java路径在这里:
/Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home
并且需要加入我的.bash_profile
:
export JAVA_HOME=\"/Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home\"
希望帮助
答案 8 :(得分:2)
跳过终端设置,因为你提到了应用程序,永久系统环境变量设置(适用于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(真的吗?)以满足您的需求和系统
答案 9 :(得分:2)
建议通过以下命令在设置 JAVA_HOME 环境变量之前检查默认终端外壳:
$ echo $SHELL
/bin/bash
如果默认终端为 / bin / bash (bash),则应使用 @hygull 方法
如果默认终端为 / bin / zsh (Z Shell),则应在〜/ .zshenv 文件中设置这些环境变量,其内容如下:>
export JAVA_HOME="$(/usr/libexec/java_home)"
类似地,以上未提及的任何其他终端类型,都应在其各自的终端环境文件中设置环境变量。
此方法在 macOS Mojave版本10.14.6 中进行了测试。
答案 10 :(得分:1)
正如其他答案所述,找到Java主目录的正确方法是使用/usr/libexec/java_home
。
官方文档在Apple的技术问答&答案QA1170:OS X上的重要Java目录:https://developer.apple.com/library/mac/qa/qa1170/_index.html
答案 11 :(得分:1)
对我来说,maven似乎可以解决var arr = [
{email: 'matthew@gmail.com', id: 10}
]
var arr2 = [
{email: 'matthew@gmail.com', id: 10},
{email: 'matthew@gmail.com', id: 13}
]
mergedArray = arr.concat(arr2);
console.log(
[...new Set(mergedArray)]
);
// output would be:
// [
// {email:'matthew@gmail.com', id: 10},
// {email:'matthew@gmail.com', id: 13}
// ]
文件:
.mavenrc
我确定我也把它拿起来,只是不记得在哪里。
答案 12 :(得分:1)
创建文件~/.mavenrc
然后将其粘贴到文件
中 export JAVA_HOME=$(/usr/libexec/java_home)
测试
mvn -v
答案 13 :(得分:0)
在过去的20年中,Java和MacOS的不同版本在JAVA_HOME上有不同的位置。所以现在有一个命令:
$ /usr/libexec/java_home
这将返回“默认” Java安装的主目录(/ usr / bin / java指向的目录)。 因此,您可以这样设置JAVA_HOME:
$ export JAVA_HOME=`/usr/libexec/java_home`
如果您关心Java的特定版本,请使用java_home作为参数。
$ /usr/libexec/java_home -v 1.8
参考:
答案 14 :(得分:-1)
对于Fish Shell用户,请使用以下内容:alias java7 "set -gx JAVA_HOME (/usr/libexec/java_home -v1.7)"