macdao / ocds-guide-to-setting-up-mac

OCD's Guide to Setting up Mac
4.39k stars 653 forks source link

关于Java设置环境变量的问题。 #15

Closed xq-cao closed 8 years ago

xq-cao commented 8 years ago

我在网上搜了下,找到了两种设置环境变量的方法。

  1. 通过一段shell脚本去设置。
function remove_from_path()
{
        export PATH=$(echo $PATH | sed -E -e "s;:$1;;" -e "s;$1:?;;")
}

if [ $# -ne 0 ]; then
        remove_from_path '/System/Library/Frameworks/JavaVM.framework/Home/bin'
        if [ -n "${JAVA_HOME+x}" ]; then
                remove_from_path $JAVA_HOME
        fi
        export JAVA_HOME=`/usr/libexec/java_home -v $@`
        export PATH=$JAVA_HOME/bin:$PATH
fi

我们可以把这段脚本保存在一个shell文件中,然后放在/bin/目录下,这样就可以执行去设置了。例如:保存为一个叫setjdk的shell文件,然后就可以:source setjdk 1.7 去设置了。 或者我们可以把这段代码放在一个shell函数中放到 zsh or bash的配置文件中,这样就不用加"source"了。 用这种方式,我们可以设置JAVA_HOME 和PATH。

据说只设置JAVA_HOME就够用了。所以也有了比较简单的第二种方案。 2、使用Alias去设置,例如:

alias setJDK6='export JAVA_HOME=$(/usr/libexec/java_home -v 1.6) && java -version'
alias setJDK7='export JAVA_HOME=$(/usr/libexec/java_home -v 1.7) && java -version'

我现在使用的是第一种,是将它保存在一个脚本中。然后每次需要用到时执行一下:. setjdk xx

这两种方法不好的地方,都是每次都要手动执行个命令去切换了。不知道有没有什么更好的方式了。

phodal commented 8 years ago

这个也不错哈:

function setjdk() {
  if [ $# -ne 0 ]; then
   removeFromPath '/System/Library/Frameworks/JavaVM.framework/Home/bin'
   if [ -n "${JAVA_HOME+x}" ]; then
    removeFromPath $JAVA_HOME
   fi
   export JAVA_HOME=`/usr/libexec/java_home -v $@`
   export PATH=$JAVA_HOME/bin:$PATH
  fi
 }
 function removeFromPath() {
  export PATH=$(echo $PATH | sed -E -e "s;:$1;;" -e "s;$1:?;;")
 }
xq-cao commented 8 years ago

如果我们可以不用设置PATH的话,那么这个代码可以减少到只有三行。

function setjdk() {
    export JAVA_HOME=`/usr/libexec/java_home -v $@`
}
macdao commented 8 years ago

我喜欢这个三行的脚本 😄

fadying commented 8 years ago

为什么没设置path也可以运行

@macdao 确实,没想到/usr/bin/java指向的文件是会自动替换的

macdao commented 8 years ago

@fadying 原因我有写,是我没说清楚嘛?在这里:https://github.com/macdao/ocds-guide-to-setting-up-mac#java 我是这么写的

那问题来了,当你运行java或者 Java 程序时使用的是哪个 JDK 呢?在 OS X 下,java也就是/usr/bin/java在默认情况下指向的是已经安装的最新版本。但是你可以设置环境变量JAVA_HOME来更改其指向:

xq-cao commented 8 years ago

这个问题已经在上面的PR中修改了。所以关闭这个PR。