Mac OSX Javaterminal版本不正确
好吧,我对Mac和OSX有点新,但是我挑了一个,所以我可以在Java程序上做一些故障排除,因为我工作的公司使用OSX和Windows机器的组合。 我遇到的问题是,当我从Oracle网站安装Java 7时,它会更新首选项菜单,并在双击它们时正确执行.jar文件,但terminal窗口的版本仍然是1.6.0_43,并运行与terminal相同的.jar文件导致运行时由于旧版本的错误。
当我导航到/库/ Java / JavaVirtualMachines /我提出了一个空的文件夹。 从我在其他文章中看到的,这是Java 1.7.0的版本文件夹应该在哪里。 任何想法发生了什么? 我怎样才能让terminal使用正确的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
编辑:对于新的答案的错误抱歉,太习惯了站点,阻止编辑的原始post这么久…
JDK
在Mac OS上, /usr/bin/java
和朋友是代理实际JDK命令的存根。 这些存根(stub)尊重您的JAVA_HOME
环境variables的设置,但为了这个工作,您需要安装JDK (从http://www.oracle.com/technetwork/java/javase/downloads/index.html ),而不是JRE (来自http://java.com )。
JDK安装到/Library/Java/JavaVirtualMachines/jdk1.7.0_NN.jdk
(对于NN的任何值),所以将你的JAVA_HOME
环境variables设置为/Library/Java/JavaVirtualMachines/jdk1.7.0_NN.jdk/Contents/Home
make /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*'
)也是如此。 这将为相关的主要版本select最新安装的JDK,您不需要记住在安装更新时手动更改NN
。
JRE
如果要从命令行运行1.7或1.8 JRE ,可以在/Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home/bin/java
。 这是一个固定的path,你只能在任何给定的时间安装一个“公共”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'
问题是Oracle的JRE安装不会更改/ usr / bin / java可执行文件。 如果你想使用这个Java,你必须使用/ Library下的path(需要find这是我有JDK安装,所以可能是不同的)
根据Oracle的JRE 安装文档
从Oracle安装JRE不会更新java -version符号链接或将java添加到您的path。 为了能够做到这一点,您需要安装JDK。
Oracle JDK确实将/usr/bin/java
更改为指向Java 7可执行文件。 如果你正在开发,那么你应该使用它,因为它包含比JRE更多的东西。
Oracle 安装FAQ说
问:我应该安装JRE还是JDK?
答:如果您计划运行Java应用程序,请安装Java运行时环境(JRE)。 JRE也被称为Oracle Java。 安装JRE后,可以通过双击JAR文件,JNLP文件和浏览器来启动Java applet和应用程序。 请注意,JRE不支持32位浏览器(例如32位模式下的Firefox)和Chrome。
如果您计划编写Java应用程序,请安装Java开发工具包(JDK)。
首先,你是否退出控制台并再次打开它,以便有机会在PATHvariables中进行更改?
如果你已经这样做了,那么检查你的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位置。
就像Ian说的,但是可能你想从.sh脚本调用java7,所以你需要一个函数来代替添加到.bash_profile中的别名:
java7() { /Library/Internet\ Plug-Ins/JavaAppletPlugin.plugin/Contents/Home/bin/java "$@" } export -f java7