我怎样才能找到我定义的地方 JAVA_HOME

How can I found where I defined JAVA_HOME

这是我的系统信息

wangbo@ubuntu:~$ uname -a
Linux ubuntu 4.4.0-72-generic #93-Ubuntu SMP Fri Mar 31 14:07:41 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux

当我检查 java 版本时

java version "1.7.0_80"
Java(TM) SE Runtime Environment (build 1.7.0_80-b15)
Java HotSpot(TM) 64-Bit Server VM (build 24.80-b11, mixed mode)

但是当我回显 $JAVA_HOME

/usr/lib/jvm/java-9-oracle

不匹配,好像我在某处定义了$JAVA_HOME,但是我找不到,谁能帮我我怎么找到我的$JAVA_HOME defined

其他有用信息:

  1. 我已经安装和卸载了 jdk9 作为第一个 jdk 之前
  2. 它不在 ~/.bashrc
  3. 它不在 /etc/bash.bashrc
  4. 它不在 ~/.profile

更新

wangbo@ubuntu:~$ more /etc/environment
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games"

你最好检查一下 /etc/environment

在我的 ubuntu 14.04 系统上,内核 4.4.0-71-generic 我使用了以下内容:

$ echo $JAVA_HOME
/usr/lib/jvm/java-8-oracle

您的 Java 命令是从 PATH 变量中提取的。很可能,您已将 Java7 添加到您的路径中。检查您的 .profile、.bash_profile、/etc/profile 和 /etc/environment 文件。

JAVA_HOME 被某些 scripts/tools 使用(想到 ant)- select java 命令。

尝试

sudo find / -path /sys -prune -o -path /proc -prune -o -type f -exec grep -l JAVA_HOME {} + 2>/dev/null

抱歉,我的第一个版本的回答将永远无法完成。但这只需要一些时间,但它会找到文件。

1) JAVA_HOME 很可能在 /etc/profile.d/jdk.sh/etc/profile.d/jdk.csh 中定义,不幸的是,这些文件不受 update-alternatives 系统管理。

2) 运行 哪个可执行文件应该取决于 update-alternatives 系统,但如果您在 PATH 中强制使用特定版本,则不会。

许多 java 应用程序实际上是由脚本调用的,这些脚本选择了首选的 jvm 来设置一致的环境,并且不应受到您的问题的影响。最好为来自 shell 的免费 java 调用提供一致的环境,但是,在大多数安装中,我知道这是手动实现的...

一些 java 发行版根本不需要 JAVA_HOME。在其他情况下,您需要它。我的建议是仅当您需要时才定义 JAVA_HOME 。如果是这种情况,请在 shell 脚本中定义它并使用该脚本调用您需要该特定值的命令。

编辑/etc/profile.d/jdk.sh 似乎是由 oracle-java8-set-default 安装的。

# Uninstall the package (choose one)
sudo apt purge oracle-java8-set-default
sudo apt remove --purge oracle-java8-set-default

# Configure the desired Java binary
sudo update-alternatives --config java
sudo update-alternatives --config javac