JDK在archlinux的默认安装目录是/usr/lib/jvm/java-8-jdk(根据JDK版本不同而改变目录名),当然,我们可以将JDK安装路径设置为JAVA_HOME
其实,在/usr/lib/jvm下共有三个文件夹,准确的说,是一个文件夹和两个文件夹的链接:

lgl@pArch /usr/lib/jvm $ ls -l
总用量 4
lrwxrwxrwx 1 root root   10 Sep 17 00:44 default -> java-8-jdk
lrwxrwxrwx 1 root root   14 Sep 17 00:44 default-runtime -> java-8-jdk/jre
drwxr-xr-x 7 root root 4096 Oct 29 11:17 java-8-jdk

可以看到defaultdefault-runtime分别指的是JAVA_HOMEJAVA_HOME下的jre文件夹。
在JDK的安装目录下,一共有这么多东西:

lgl@pArch /usr/lib/jvm/java-8-jdk $ ls -l
总用量 25624
drwxr-xr-x 2 root root     4096 Oct 29 11:17 bin
drwxr-xr-x 4 root root     4096 Oct 29 11:17 db
drwxr-xr-x 3 root root     4096 Oct 29 11:17 include
-rwxr-xr-x 1 root root  5104609 Oct  7 04:00 javafx-src.zip
drwxr-xr-x 4 root root     4096 Oct 29 11:17 jre
drwxr-xr-x 5 root root     4096 Oct 29 11:17 lib
-r--r--r-- 1 root root      159 Oct  7 08:36 README.html
-rw-r--r-- 1 root root      525 Oct  7 08:36 release
-rw-r--r-- 1 root root 21099344 Oct  7 08:36 src.zip

可以看到jre文件夹(java runtime environment,java运行时需要用到的东西)就在JDK的安装目录下。
那么archlinux是怎么使用javacjava的,是把JAVA_HOME加入PATH环境变量了吗?
看一下我们的PATH环境变量:

lgl@pArch ~ $ echo $PATH 
/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/lib/jvm/default/bin:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl

可以看到JDK的安装目录并不在里面,在里面的只是JDK安装目录下的bin文件夹,它只是JDK安装目录的一部分,那么archlinux使用的javacjava是通过/usr/lib/jvm/default/bin找到的吗?我们不妨找一下:

lgl@pArch ~ $ whereis javac
javac: /usr/bin/javac /usr/lib/jvm/java-8-jdk/bin/javac
lgl@pArch ~ $ whereis java 
java: /usr/bin/java /usr/share/java /usr/lib/jvm/java-8-jdk/bin/java

每一个都对应了多个地方,那么我们平时用的javacjava到底是那一个目录里面的呢?

lgl@pArch ~ $ which javac
/usr/bin/javac
lgl@pArch ~ $ which java 
/usr/bin/java

恩,都是/usr/bin里面的,这个目录里面为什么会有java的东西呢?我们再仔细看看:

lgl@pArch ~ $ ls -l /usr/bin | grep java
-rwxr-xr-x 1 root root       4610 Nov  2  2014 archlinux-java
lrwxrwxrwx 1 root root         37 Nov  2  2014 java -> /usr/lib/jvm/default-runtime/bin/java
lrwxrwxrwx 1 root root         30 Nov  2  2014 javac -> /usr/lib/jvm/default/bin/javac
lrwxrwxrwx 1 root root         32 Nov  2  2014 javadoc -> /usr/lib/jvm/default/bin/javadoc
lrwxrwxrwx 1 root root         30 Nov  2  2014 javah -> /usr/lib/jvm/default/bin/javah
lrwxrwxrwx 1 root root         30 Nov  2  2014 javap -> /usr/lib/jvm/default/bin/javap

这下真相大白了!原来/usr/bin里面的javacjava(不只是这两个,还有javadoc\javah\javap)都是链接!他们实际上是来自于/usr/lib/jvm/default/bin//usr/lib/jvm/default-runtime/bin/下的。而在开头我们已经说过了,default目录实际上不是目录,而是链接,指向的是我们的JDK安装目录/usr/lib/jvm/java-8-jdk。而default-runtime也是我们JDK安装目录下的jre文件夹。所以说,archlinux用的javac虽然是通过/usr/bin找到的javac,但其实最终还是链接到了我们的JDK安装目录下的bin里的javacjava还是JDK安装目录下的jre里的java
这下我们也明白了为什么使用whereis查找javajavac的时候会出现多个目录,其实除了JDK真正的安装目录,其他的都是链接。
而且,理论上来讲,加入PATH/usr/lib/jvm/default/bin里面只有javacjava是运行的时候用到的,应该在jre目录里,但是实际上,/usr/lib/jvm/default/bin目录里面也有java

lrwxrwxrwx 1 root root    36 Oct 22 08:58 java -> /usr/lib/jvm/java-8-jdk/jre/bin/java
-rwxr-xr-x 1 root root  7941 Oct  7 08:36 javac

可以看到,也是通过链接,链到jre/bin目录里的java的。

GitHub 加速计划 / li / linux-dash
10.39 K
1.2 K
下载
A beautiful web dashboard for Linux
最近提交(Master分支:23 天前 )
186a802e added ecosystem file for PM2 4 年前
5def40a3 Add host customization support for the NodeJS version 4 年前
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐