在我的 Linux 机器上,输入后which java
,我得到
/usr/bin/java
输入后whereis java
,我得到
java:/usr/bin/java /etc/java /usr/share/java /usr/share/man/man1/java.1.gz
这两个结果的含义是什么?设置 JAVA_HOME 时,我应该使用哪一个?
答案1
which (1) - shows the full path of (shell) commands
whereis (1) - locate the binary, source, and manual page files for a command
我会使用which
它,因为它只显示二进制文件的位置,因为我认为这就是您所需要的。但是 Java 可以安装在其他地方,并且which
不会报告它,因为它只在环境变量中列出的目录中搜索可执行文件或脚本PATH
。
答案2
which <executable>
返回在 PATH 上找到的第一个可执行文件。换句话说,如果<executable>
作为命令输入,将执行什么。
答案3
JAVA_HOME
应该是包含 JDK 或 JRE 的父文件夹,或者换句话说,它有Java 发行版中的/lib
等/bin
文件夹,其中包含 Java 运行时的库/依赖项以及可执行文件。 就您而言,这似乎/usr/share/java
是最合适的 - 检查其中是否有来自发行版的子文件夹。
which
命令返回第一个可执行匹配,同时whereis
定位其他匹配以及可执行文件。
答案4
这些都不是。
JAVA_HOME 应该指向 JDK 的根文件夹
在我的系统上:
$ echo $JAVA_HOME
/etc/java-config-2/current-system-vm
$ ll /etc/java-config-2/current-system-vm
lrwxrwxrwx 1 root root 24 mai 16 2009 /etc/java-config-2/current-system-vm -> /usr/lib/jvm/sun-jdk-1.6