archlinux的JDK默认安装路径

来源:互联网 发布:农村淘宝贷款 编辑:程序博客网 时间:2024/05/24 00:02

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

lgl@pArch /usr/lib/jvm $ ls -l总用量 4lrwxrwxrwx 1 root root   10 Sep 17 00:44 default -> java-8-jdklrwxrwxrwx 1 root root   14 Sep 17 00:44 default-runtime -> java-8-jdk/jredrwxr-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总用量 25624drwxr-xr-x 2 root root     4096 Oct 29 11:17 bindrwxr-xr-x 4 root root     4096 Oct 29 11:17 dbdrwxr-xr-x 3 root root     4096 Oct 29 11:17 include-rwxr-xr-x 1 root root  5104609 Oct  7 04:00 javafx-src.zipdrwxr-xr-x 4 root root     4096 Oct 29 11:17 jredrwxr-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 javacjavac: /usr/bin/javac /usr/lib/jvm/java-8-jdk/bin/javaclgl@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/javaclgl@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-javalrwxrwxrwx 1 root root         37 Nov  2  2014 java -> /usr/lib/jvm/default-runtime/bin/javalrwxrwxrwx 1 root root         30 Nov  2  2014 javac -> /usr/lib/jvm/default/bin/javaclrwxrwxrwx 1 root root         32 Nov  2  2014 javadoc -> /usr/lib/jvm/default/bin/javadoclrwxrwxrwx 1 root root         30 Nov  2  2014 javah -> /usr/lib/jvm/default/bin/javahlrwxrwxrwx 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的。

0 0