设置JAVA_HOME出现问题。

~/.bash_profile中,我设置了以下内容:
export JAVA_HOME=/usr/lib/jvm/java-7-openjdk-i386/bin/java
export PATH=$PATH:/usr/lib/jvm/java-7-openjdk-i386/bin

保存并关闭后,我运行了以下命令:
sudo su
source .bash_profile

echo $PATH 带来的是

root@ubuntu:~# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/lib/jvm/java-7-openjdk-i386/bin

哪个Java

/usr/bin/java

但是如果我启动SmartGit,会出现以下警告
ip@ubuntu:/usr/share/smartgithg/bin$ ./smartgithg.sh 
Warning: /usr/lib/jvm/java-7-openjdk-i386/jre/bin/java/bin/java does not exist

为什么'which java'不指向我安装的新java? 而且为什么$PATH中包含两次bin/java/

你解决了吗?我也遇到了同样的问题。 - rubo77
3个回答

您可以使用update-alternatives命令选择Java版本。
在终端中运行以下命令。
sudo update-alternatives --config java

请输入您想使用的选项号码。
就像这样:

selecting java version

注意:上述描述是更改默认版本的步骤。它不是对这个问题的答案,但应该帮助您设置JAVA home。

太好了,谢谢。wikihow.com真是帮了大忙。 - user1662013
我的javahome还是空的。抱歉,但我必须-1这个...如果可以的话。 - Zaibis

Ubuntu使用update-alternatives系统来管理应该使用哪个Java JDK或JRE的安装。这使您可以安装多个版本的Java,但仍然可以控制默认使用哪个版本。
这就是为什么which java不显示您安装的版本的原因;/usr/bin/java只是一个符号链接。如果您运行ls -l /usr/bin/java,您会看到类似以下内容:
lrwxrwxrwx 1 root root 22 Jul  4  2013 /usr/bin/java -> /etc/alternatives/java

如果你通过运行ls -l /etc/alternatives/java来跟踪路径,你会看到类似于以下内容:

lrwxrwxrwx 1 root root 39 Jul 15  2013 /etc/alternatives/java -> /usr/lib/jvm/java-7-oracle/jre/bin/java

但确切的路径将取决于您选择的版本。
您可以使用以下命令选择要运行的Java版本:
sudo update-alternatives --config java

你的路径中包含两个bin/java,这是因为你配置了$JAVA_HOME错误。 $JAVA_HOME应该指向你的Java安装的根目录;在你的情况下,应该是/usr/lib/jvm/java-7-openjdk-i386/。你之前把它指向了java二进制文件本身。
除非你手动安装Java而不使用update-alternatives,否则你不需要将$JAVA_HOME添加到$PATH中,因为/usr/bin已经在你的$PATH中了。

你在你的~/.bash_profile文件中错误地设置了JAVA_HOME变量。请将你的JAVA_HOME变量更改为:
export JAVA_HOME=/usr/lib/jvm/java-7-openjdk-i386/

然后执行source ~/.bash_profile
这应该解决你的问题。