Mac OS X 10.6.7 Java路径当前JDK混乱。

58

我在Mac OSX上安装多个Java版本时遇到了困难,无法理解实际路径与链接之间的关系。通常在Windows中,如果我在计算机上安装了多个版本,则可以使用我想要的任何版本的路径。但是在Mac OS X中,我了解到存在一些称为链接的东西被指向CurrentJDK,如果我想使用不同的版本,我需要更改链接到CurrentJdk,对吗?但是让我感到困惑的是,如下所示,所有版本都指向同一个CurrentJDK,这意味着所有版本都指向当前版本?我本来以为只有其中一个会指向CurrentJDK,我可以将其更改为我需要的任何一个版本,但这里并非如此。我只需要知道如何找到每个版本的bin(命令)文件夹路径,以便我可以使用它来指向CurrentJDK?同时告诉我如何更改链接到CurrentJDK。

$ java -version

java version "1.6.0_24"
Java(TM) SE Runtime Environment (build 1.6.0_24-b07-334-10M3326)
Java HotSpot(TM) 64-Bit Server VM (build 19.1-b02-334, mixed mode)

$ pwd

/System/Library/Frameworks/JavaVM.framework/Versions


$ ls -l

lrwxr-xr-x   1 root  wheel    5 Mar 20 11:12 1.3 -> 1.3.1
drwxr-xr-x   3 root  wheel  102 Dec  2  2009 1.3.1
lrwxr-xr-x   1 root  wheel   10 Mar 20 11:12 1.4 -> CurrentJDK
lrwxr-xr-x   1 root  wheel   10 Mar 20 11:12 1.4.2 -> CurrentJDK
lrwxr-xr-x   1 root  wheel   10 Mar 20 11:12 1.5 -> CurrentJDK
lrwxr-xr-x   1 root  wheel   10 Mar 20 11:12 1.5.0 -> CurrentJDK
lrwxr-xr-x   1 root  wheel   10 Mar 20 11:12 1.6 -> CurrentJDK
lrwxr-xr-x   1 root  wheel   10 Mar 20 11:12 1.6.0 -> CurrentJDK
drwxr-xr-x  10 root  wheel  340 Mar 20 11:13 A
lrwxr-xr-x   1 root  wheel    1 Mar 20 11:12 Current -> A
lrwxr-xr-x   1 root  wheel   59 Mar 20 11:12 CurrentJDK -> /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents

2
运行 which java 命令来识别当前正在使用的 Java 版本。然后运行 /usr/libexec/java_home -version <你想要的版本,例如 1.8>。它将打印出相关的 Java 主目录文件夹。 - S.M.Mousavi
6个回答

67

针对不同类型的JDK或安装,路径是不同的。

在Mac OS X Mavericks上,我找到的路径如下:

1)内置JRE默认:

 /Library/Internet\ Plug-Ins/JavaAppletPlugin.plugin/Contents/Home

2) 从苹果下载的JDK:

 /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home/

3)从Oracle下载的JDK:

/Library/Java/JavaVirtualMachines/jdk1.8.0_11.jdk/Contents/Home

16

很有可能您只安装了一个jdk,因此所有的软连接都指向同一个jdk。但如果您安装了多个jdk,则需要使用/Application/Utilities中的“Java Preferences”应用程序选择要使用的jdk。

顺便说一下,软连接是通过终端中的ln -s命令创建的。


我明白你的意思。我看了一下Java Preferences,好像只有一个版本的Java SE 6。那么如果我有多个版本,如果我只启用其中一个版本,我的CurrentJDK会指向所选的版本? 我实际上需要同时使用Java 5和1.6。既然我已经有了6,是否仍然可以安装版本5而不破坏现有的6版本? - reddyvaribabu
是的,您可以同时拥有1.5和1.6版本。对于从命令行启动的程序,您仍然可以设置JAVA_HOME以指向所需的JDK。由“Java Preferences”设置的JDK是系统使用的JDK,当通过单击图标打开程序时也会使用该JDK。 - Karl-Bjørnar Øie
现在我看到我的JAVA_HOME是空的。这是否意味着设置JAVA_HOME不是强制性的,只需在Java首选项实用程序中启用即可将所需版本指向CurrentJDK? - reddyvaribabu
是的,JAVA_HOME并非必需,但如果您安装了jdk-1.5,仍然希望系统使用jdk-1.6,则设置JAVA_HOME将使您能够使用任何jdk,同时系统使用官方的jdk-1.6。 - Karl-Bjørnar Øie
4
快速更新:Java设置/偏好应用现在位于“系统偏好设置”->“其他”->“Java”,而不是位于“应用程序”/“实用工具”中。 - Matt Ray
显示剩余3条评论

5

只需运行以下命令:

$ brew update
$ brew install jenv
$ echo 'export PATH="$HOME/.jenv/bin:$PATH"' >> ~/.bash_profile
$ echo 'eval "$(jenv init -)"' >> ~/.bash_profile
$ source ~/.bash_profile

$ jenv add /Library/Java/JavaVirtualMachines/jdk1.8.0_45.jdk/Contents/Home/
  oracle64-1.8.0.45 added
  1.8.0.45 added
  1.8 added

$ jenv add /Library/Java/JavaVirtualMachines/jdk1.7.0_79.jdk/Contents/Home
  oracle64-1.7.0.79 added
  1.7.0.79 added
  1.7 added

$ jenv versions
* system (set by /Users/wanluwang/.jenv/version)
  1.7
  1.7.0.79
  1.8
  1.8.0.45
  oracle64-1.7.0.79
  oracle64-1.8.0.45

$ java -version
  java version "1.8.0_45"
  Java(TM) SE Runtime Environment (build 1.8.0_45-b14)
  Java HotSpot(TM) 64-Bit Server VM (build 25.45-b02, mixed mode)

$ jenv global oracle64-1.7.0.79

$ java -version
  java version "1.7.0_79"
  Java(TM) SE Runtime Environment (build 1.7.0_79-b15)
  Java HotSpot(TM) 64-Bit Server VM (build 24.79-b02, mixed mode)

Rajas-MacBook-Pro:/$ $ brew update -bash: $: 命令未找到 Rajas-MacBook-Pro:/$ $ brew install jenv -bash: $: 命令未找到 Rajas-MacBook-Pro:/$ $ echo 'export PATH="$HOME/.jenv/bin:$PATH"' >> ~/.bash_profile -bash: $: 命令未找到 Rajas-MacBook-Pro:/$ $ echo 'eval "$(jenv init -)"' >> ~/.bash_profile -bash: $: 命令未找到 Rajas-MacBook-Pro:/$ $jenv add /Library/Java/JavaVirtualMachines/jdk1.7.0_79.jdk/Contents/Home -bash: add: 命令未找到 - raja777m
@raja777m ~ 在终端执行命令时不需要包含前导的 "$" 符号。省略它,一切都应该正常工作。 - Tommie C.

0

在你的 .bash_profile 中设置 $JAVA_HOME=$(/usr/libexec/java_home)

或者导出 JAVA_HOME=$(/usr/libexec/java_home);

echo $JAVA_HOME


0

来自苹果技术问答Java问题:

用户首选项

在Mac OS X上,Java运行时提供了java.util.prefs API,它由标准的Mac OS X首选项API和目录支持。仅使用此纯Java API即可读取和存储应用程序的首选项,在Mac OS X属性列表文件中的~/Library/Preferences中。对于可能已经拥有自己首选项格式的应用程序,这些首选项也应存储在~/Library/Preferences目录中。可以通过创建具有System.getProperty("user.home") + "/Library/Preferences/" + "com.example.your.Application"路径的文件来从Java代码访问此目录。应该在所有用户之间具有全局首选项的应用程序可以位于/Library/Preferences中,但是非管理员用户无法写入此目录。


0
在Mac Ventura上,从Oracle下载了JDK。
/Library/Java/JavaVirtualMachines/adoptopenjdk-8.jdk/Contents/Home

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接