Mac OSX Java终端版本不正确

时间:2013-03-25 21:00:31

标签: java macos terminal

好吧,我对Mac和OSX有点新手,但我选了一个以便我可以对我的Java程序进行一些故障排除,因为我工作的公司使用OSX和Windows机器的组合。我遇到的问题是,当我从Oracle网站安装Java 7时,它会更新首选项菜单,并且在双击它们时似乎正确执行.jar文件,但是终端窗口的版本仍然是1.6.0_43并运行来自终端的相同.jar文件会因旧版本而导致运行时错误。

当我导航到/ Library / Java / JavaVirtualMachines /我出现了一个空文件夹。从我在其他文章中看到的,这是Java 1.7.0的版本文件夹所在的位置。知道发生了什么事吗?如何让终端使用正确版本的Java?

编辑:@DWilches评论他的原始答案: (1)

total 64
lrwxr-xr-x  1 root  wheel   10 Mar 17 21:38 1.4 -> CurrentJDK
lrwxr-xr-x  1 root  wheel   10 Mar 17 21:38 1.4.2 -> CurrentJDK
lrwxr-xr-x  1 root  wheel   10 Mar 17 21:38 1.5 -> CurrentJDK
lrwxr-xr-x  1 root  wheel   10 Mar 17 21:38 1.5.0 -> CurrentJDK
lrwxr-xr-x  1 root  wheel   10 Mar 17 21:38 1.6 -> CurrentJDK
lrwxr-xr-x  1 root  wheel   10 Mar 17 21:38 1.6.0 -> CurrentJDK
drwxr-xr-x  8 root  wheel  272 Mar 17 21:38 A
lrwxr-xr-x  1 root  wheel    1 Mar 17 21:38 Current -> A
lrwxr-xr-x  1 root  wheel   59 Mar 17 21:38 CurrentJDK -> /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents

(2)

ls -ld /usr/bin/java
lrwxr-xr-x  1 root  wheel  74 Mar 17 21:38 /usr/bin/java -> /System/Library/Frameworks/JavaVM.framework/Versions/Current/Commands/java

编辑:对于新答案的错误感到抱歉,已经习惯了那些长时间阻止原始帖子编辑的网站......

4 个答案:

答案 0 :(得分:115)

JDK

在Mac OS上,/usr/bin/java和朋友是委托给真正的JDK命令的存根。这些存根遵循JAVA_HOME环境变量的设置,但要实现此目的,您需要安装 JDK (来自http://www.oracle.com/technetwork/java/javase/downloads/index.html)而不是 JRE < / em>(来自http://java.com)。

JDK安装到/Library/Java/JavaVirtualMachines/jdk1.7.0_NN.jdk(对于NN的任何值),因此将JAVA_HOME环境变量设置为/Library/Java/JavaVirtualMachines/jdk1.7.0_NN.jdk/Contents/Home以使/usr/bin/java使用1.7。您只需将JAVA_HOME指向/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home即可切换回1.6。您可以使用/usr/libexec/java_home工具自动查找正确的值,例如使/usr/bin/java使用您可以执行的Java 7

export JAVA_HOME=`/usr/libexec/java_home -v '1.7*'`

并使其可以使用Java 6

export JAVA_HOME=`/usr/libexec/java_home -v '1.6*'`

这同样适用于Java 8(使用-v '1.8*')。这将为相关主要版本选择最新安装的JDK,您不需要记住在安装更新时手动更改NN

JRE

如果要从命令行运行1.7或1.8 JRE ,可以在/Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home/bin/java中找到它。这是一条固定的路径,你只能拥有一个公共的&#34;在任何给定时间安装JRE。

$ /Library/Internet\ Plug-Ins/JavaAppletPlugin.plugin/Contents/Home/bin/java -version
java version "1.7.0_13"
Java(TM) SE Runtime Environment (build 1.7.0_13-b20)
Java HotSpot(TM) 64-Bit Server VM (build 23.7-b01, mixed mode)

您可以在.bashrc

中使用shell别名
alias java_jre='/Library/Internet\ Plug-Ins/JavaAppletPlugin.plugin/Contents/Home/bin/java'

答案 1 :(得分:11)

问题是Oracle的JRE安装不会更改/ usr / bin / java可执行文件。如果你想使用这个Java,你必须使用/ Library下的路径(需要找到我有JDK安装的内容,所以可能会有所不同)

根据Oracle的JRE installation document

  

从Oracle安装JRE不会更新java -version符号链接或   将java添加到您的路径中。为了能够做到这一点,你需要安装   JDK。

Oracle JDK确实将/usr/bin/java更改为指向Java 7可执行文件。如果您正在进行开发,那么您应该使用它,因为它包含的不仅仅是JRE。

Oracle install FAQ

  

问:我应该安装JRE还是JDK?

     

答:如果您计划运行Java应用程序,请安装Java Runtime   环境(JRE)。 JRE也称为Oracle Java。一旦   你已经安装了JRE,你可以启动Java applets和   通过双击JAR文件,JNLP文件和通过   浏览器。请注意32位浏览器,例如32位模式下的Firefox,   JRE不支持Chrome和Chrome。

     

如果您打算编写Java应用程序,请安装Java Development   Kit(JDK)。

答案 2 :(得分:5)

首先,您是否退出控制台并再次打开它,以便有可能在PATH变量中进行更改?

如果您已经这样做了,那么请检查Java的默认版本是哪个:

dwilches@ ~$ cd /System/Library/Frameworks/JavaVM.framework/Versions/
dwilches@ Versions$ ls -l
lrwxr-xr-x  1 root  wheel   59 Mar 19 10:07 CurrentJDK -> /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents
lrwxr-xr-x  1 root  wheel   10 Mar 19 10:07 1.6.0 -> CurrentJDK
lrwxr-xr-x  1 root  wheel   10 Mar 19 10:07 1.6 -> CurrentJDK
lrwxr-xr-x  1 root  wheel   10 Mar 19 10:07 1.5.0 -> CurrentJDK
lrwxr-xr-x  1 root  wheel   10 Mar 19 10:07 1.5 -> CurrentJDK
lrwxr-xr-x  1 root  wheel   10 Mar 19 10:07 1.4.2 -> CurrentJDK
lrwxr-xr-x  1 root  wheel   10 Mar 19 10:07 1.4 -> CurrentJDK
lrwxr-xr-x  1 root  wheel    1 Mar 19 10:08 Current -> A
drwxr-xr-x  8 root  wheel  272 Mar 25 10:03 A

现在,您可以看到“当前”版本是“A”(这是我的Java7)。如果我想将其更改为Java 1.6,那么我可以写:

dwilches@ Versions$ sudo unlink Current
dwilches@ Versions$ sudo ln -s 1.6 Current

然后:

dwilches@ Versions$ java -version
java version "1.6.0_43"
Java(TM) SE Runtime Environment (build 1.6.0_43-b01-447-11M4203)
Java HotSpot(TM) 64-Bit Server VM (build 20.14-b01-447, mixed mode)

因此,您可以使用它来使“当前”指向您想要的Java位置。

答案 3 :(得分:-1)

就像Ian所说,但是你可能希望从.sh脚本调用java7,所以你需要一个函数而不是别名添加到.bash_profile:

java7() {
    /Library/Internet\ Plug-Ins/JavaAppletPlugin.plugin/Contents/Home/bin/java "$@"
}
export -f java7