前面有一篇《环境变量详解》介绍了 Windows 和 Linux 系统下的环境变量,这里介绍一下 Java 的安装及其环境变量配置。
Windows 下安装 Java
到 Oracle 官网上下载 JDK 的 Windows 版安装文件(下载时需要同意协议并登录 Oracle 账号),我下载的是 jdk-8u311-windows-x64.exe
。
下载完成之后双击 exe 文件,然后按照安装向导一步步向下点击就可以了。
Windows 下配置 Java 环境变量
步骤如下:
- JDK 安装完毕后需要设置 JAVA 环境变量。先将 JDK 主目录添加到 JAVA_HOME 环境变量:
看到这里你可能会有这样的疑问:为什么安装到了 C 盘而不是其他盘,难道不怕影响系统性能吗?哥的 C 盘是固态硬盘,安装到其他盘反而会发挥不出固态硬盘的性能(SSD 党在这里骄(zhuang)傲(bi)三秒钟,哈哈),为什么不是
Program files
默认目录呢?因为系统默认目录可能会有写权限的限制,我就把所有开发相关的软件统一安装到了一个自定义目录 softwares 中了。
- 然后在将 JDK 的 bin 目录添加到 Path 环境变量中.选中用户的 Path 环境变量,选择
编辑
按钮,在弹出的对话框中,点击新建
按钮,将%JAVA_HOME%
目录添加到 Path中:
-
验证。在命令行中输入
java --version
命令,可以看到如下提示说明环境变量设置成功并生效:C:\Users\vincent>java -version java version "1.8.0_311" Java(TM) SE Runtime Environment (build 1.8.0_311-b01) Java HotSpot(TM) 64-Bit Server VM (build 25.311-b01, mixed mode)
神马?明明设置了环境变量但是提示找不到 java 命令,那试试签名介绍的如何刷新 Windows 下的环境变量设置吧。
你可能从网上看到过 Java 还需要配置 CLASSPATH 环境变量的,该环境变量主要用来告知 JRE 去哪里寻找所要运行的 .class 文件(可能在一个 jar 包中),这个环境变量通常设置为:
.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar
其中,.
表示当前目录,dt.jar
和 tools.jar
包含编译和运行java程序的 .class 文件。其实从 JDK 1.5 开始,JRE会自动搜索当前目录下的 .class 文件,当使用 Java 的编译和运行工具是,系统会自动加载dt.jar
和 tools.jar
中包含的 .class 文件。所以,从 JDK 1.5 开始 CLASSPATH 环境变量就不需要设置了,但是,只要设置了就必须设置为上面的值,否则编译或运行 Java 程序就会出错。
Linux 下安装 Java
通过 rpm 文件安装
到 Oracle 官网上下载 JDK 安装文件(下载时可能需要登录 Oracle 账号),我下载的为:jdk-8u311-linux-x64.rpm
。这种方式会自动创建一些可能被其他基于 Java 程序所使用的链接文件,建议使用这种方式安装。
下载完 rpm 文件之后使用 FTP 工具将 jdk-8u311-linux-x64.rpm
安装文件上传至 Linux 的某个用户目录中(我这里为 /home/tomcat 目录),然后安装 jdk-8u311-linux-x64.rpm
。如下所示。
[root@localhost tomcat]# yum localinstall jdk-8u311-linux-x64.rpm
# 安装完成之后使用 java -version 命令可以看到版本号
[root@localhost ~]# java -version
java version "1.8.0_311"
Java(TM) SE Runtime Environment (build 1.8.0_311-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.311-b11, mixed mode)
# 执行 echo $JAVA_HOME 命令输出为空,因为此时并未设置 JAVA_HOME 环境变量
[root@localhost tomcat]# echo $JAVA_HOME
# 未设置环境变量为什么也能执行 java -version 命令呢,我们通过执行 whereis java 发现这种安装方式创
# 建了一个最终链接到 /usr/java/jdk1.8.0_311-amd64/bin/java 可执行文件的链接文件 /usr/bin/java,
# 而位于 /usr/bin 目录下的可执行文件会被默认查找
[root@localhost tomcat]# whereis java
java: /usr/bin/java /usr/lib/java /etc/java /usr/share/java /usr/share/man/man1/java.1
[root@localhost tomcat]# ll /usr/bin/java
lrwxrwxrwx. 1 root root 22 10月 30 10:18 /usr/bin/java -> /etc/alternatives/java
[root@localhost tomcat]# ll /etc/alternatives/java
lrwxrwxrwx. 1 root root 37 10月 30 10:18 /etc/alternatives/java -> /usr/java/jdk1.8.0_311-amd64/bin/java
[root@localhost tomcat]# ll /usr/java/jdk1.8.0_311-amd64/bin/java
-rwxr-xr-x. 1 root root 8712 9月 27 20:26 /usr/java/jdk1.8.0_311-amd64/bin/java
# JDK 默认安装到了 /usr/java 目录下
[root@localhost tomcat]# ll /usr/java/jdk1.8.0_311-amd64
总用量 25812
drwxr-xr-x. 2 root root 4096 10月 30 10:18 bin
-rw-r--r--. 1 root root 3244 9月 27 20:26 COPYRIGHT
drwxr-xr-x. 3 root root 132 10月 30 10:18 include
-rw-r--r--. 1 root root 5235749 9月 27 17:16 javafx-src.zip
-rw-r--r--. 1 root root 195 9月 27 20:26 jmc.txt
drwxr-xr-x. 6 root root 198 10月 30 10:18 jre
drwxr-xr-x. 4 root root 31 10月 30 10:18 legal
drwxr-xr-x. 4 root root 223 10月 30 10:18 lib
-rw-r--r--. 1 root root 44 9月 27 20:26 LICENSE
drwxr-xr-x. 4 root root 47 10月 30 10:18 man
-rw-r--r--. 1 root root 159 9月 27 20:26 README.html
-rw-r--r--. 1 root root 486 9月 27 20:26 release
-rw-r--r--. 1 root root 21158373 9月 27 20:26 src.zip
-rw-r--r--. 1 root root 190 9月 27 17:16 THIRDPARTYLICENSEREADME-JAVAFX.txt
-rw-r--r--. 1 root root 190 9月 27 20:26 THIRDPARTYLICENSEREADME.txt
# 可以查看一下安装包的信息
[root@localhost tomcat]# rpm -qa | grep jdk1.8*
jdk1.8-1.8.0_311-fcs.x86_64
[root@localhost ~]# rpm -qlicdR jdk1.8-1.8.0_311-fcs.x86_64
Name : jdk1.8
Epoch : 2000
Version : 1.8.0_311
Release : fcs
Architecture: x86_64
Install Date: 2021年10月30日 星期六 10时18分18秒
Group : Development/Tools
Size : 269439310
License : https://java.com/otnlicense
Signature : RSA/SHA256, 2021年09月27日 星期一 20时58分24秒, Key ID 72f97b74ec551f03
Source RPM : jdk1.8-1.8.0_311-fcs.src.rpm
Build Date : 2021年09月27日 星期一 20时33分16秒
Build Host : java.com
Relocations : /usr/java
Vendor : Oracle Corporation
URL : http://www.oracle.com/technetwork/java/javase/overview/index.html
Summary : Java Platform Standard Edition Development Kit
Description :
The Java Platform Standard Edition Development Kit (JDK) includes both
the runtime environment (Java virtual machine, the Java platform classes
and supporting files) and development tools (compilers, debuggers,
tool libraries and other tools).
The JDK is a development environment for building applications, applets
and components that can be deployed with the Java Platform Standard
Edition Runtime Environment.
/bin/basename
/bin/cat
/bin/cp
/bin/gawk
/bin/grep
/bin/ln
/bin/ls
/bin/mkdir
/bin/mv
/bin/pwd
/bin/rm
/bin/sed
/bin/sort
/bin/touch
/usr/bin/cut
/usr/bin/dirname
/usr/bin/expr
/usr/bin/find
/usr/bin/tail
/usr/bin/tr
/usr/bin/wc
/bin/sh
/bin/sh
/bin/sh
/bin/sh
rpmlib(FileDigests) <= 4.6.0-1
rpmlib(PayloadFilesHavePrefix) <= 4.0-1
rpmlib(CompressedFileNames) <= 3.0.4-1
rpmlib(PayloadIsXz) <= 5.2-1
通过 .tar.gz 文件安装
当然也可以下载 .tar.gz 格式的 JDK 安装文件,我下载的是 jdk-8u311-linux-x64.tar.gz
。下载完 tar.gz 文件之后使用 FTP 工具将 jdk-8u311-linux-x64.tar.gz
安装文件上传至 Linux 的某个用户目录中,然后解压 jdk-8u311-linux-x64.tar.gz
文件,并将解压后的目录复制到 /usr/java/
目标安装目录(最好跟 rpm 安装方式的安装位置相同)下。如下所示。
[root@localhost tomcat]# tar -xzvf jdk-8u311-linux-x64.tar.gz
[root@localhost tomcat]# ll
总用量 255976
drwxr-xr-x. 8 10143 10143 273 9月 27 20:29 jdk1.8.0_311
-rw-r--r--. 1 root root 146799982 10月 30 11:16 jdk-8u311-linux-x64.tar.gz
[root@localhost tomcat]# cp -r jdk1.8.0_311 /usr/java/
这种安装方式在某些时候可能需要手动创建一些链接文件才可以运行基于 Java 的程序,比如 Jenkins 启动时会自动查找 /usr/bin/java
文件并将其作为可执行的 java 文件,这时需要使用 ln -s
命令手动创建 /usr/bin/java
符号链接文件,将其链接到目标安装目录中的 java
可执行文件。如下所示。
[root@localhost bin]# ln -s /usr/java/jdk1.8.0_311-amd64/bin/java /usr/bin/java
[root@localhost bin]# /usr/bin/java -version
java version "1.8.0_311"
Java(TM) SE Runtime Environment (build 1.8.0_311-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.311-b11, mixed mode)
需要时再创建上述符号链接文件也可以。
Linux 下配置 Java 环境变量
-
设置系统环境变量。通过 rpm 文件的方式不显式设置
JAVA_HOME
环境变量就可以直接运行java
可执行文件,那么不设置JAVA_HOME
环境变量是不是就可以了呢?其实不然,许多基于 Java 的程序,比如 Ant、Maven、Tomcat 等启动时都会查找并使用JAVA_HOME
环境变量的值。所以设置JAVA_HOME
环境变量是非常有必要的,如果通过解压 tar.gz 压缩归档文件的方式安装 JDK 就更要设置JAVA_HOME
环境变量了,否则根本无法随处运行java
可执行文件。使用
sudo vim /etc/profile.d/jdk_env.sh
命令新建一个sh
文件,并配置以下环境变量:# Oracel Java Environment Variable Configuration Start export JAVA_HOME=/usr/java/jdk1.8.0_311-amd64 # CLASSPATH is not necessary since JDK 1.5 #export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar export PATH=$PATH:$JAVA_HOME/bin # Oracel Java Environment Variable Configuration End
使用 vim 保存后,可以执行
cat /etc/profile.d/jdk_env.sh
查看一下配置是否正确。 -
更新环境变量。修改完成后,使用
sudo source /etc/profile
命令进行更新(/etc/profile
文件会读取/etc/profile.d/jdk_home.sh
中的配置)。如果该命令操作失败,提示权限不足,那么将$JAVA_HOME/lib/dt.jar
和$JAVA_HOME/lib/tools.jar
这两个文件的权限修改为可执行,然后重新执行sudo source /etc/profile
命令:[root@localhost jdk1.8.0_311-amd64]# source /etc/profile -bash: /usr/java/jdk1.8.0_311-amd64/lib/tools.jar: Permission denied [root@localhost tomcat]# cd /usr/java/jdk1.8.0_311-amd64/lib [root@localhost lib]# ll total 39780 drwxr-xr-x. 3 root root 4096 May 23 21:03 amd64 -rw-r--r--. 1 root root 1218653 Mar 29 08:21 ant-javafx.jar -rw-r--r--. 1 root root 18229876 Mar 29 08:15 ct.sym -rw-r--r--. 1 root root 159870 Mar 29 08:21 dt.jar -rw-r--r--. 1 root root 18432 Mar 29 08:15 ir.idl -rw-r--r--. 1 root root 35992 Mar 29 08:23 javafx-mx.jar -rw-r--r--. 1 root root 404452 Mar 29 08:21 jconsole.jar -rwxr-xr-x. 1 root root 10493 Mar 29 08:21 jexec drwxr-xr-x. 7 root root 4096 May 23 21:03 missioncontrol -rw-r--r--. 1 root root 640 Mar 29 08:15 orb.idl -rw-r--r--. 1 root root 4633 Mar 29 08:23 packager.jar -rw-r--r--. 1 root root 2381736 Mar 29 08:21 sa-jdi.jar -rw-r--r--. 1 root root 18233649 May 23 21:03 tools.jar drwxr-xr-x. 6 root root 4096 May 23 21:03 visualvm [root@localhost lib]# chmod 751 dt.jar [root@localhost lib]# chmod 751 tools.jar [root@localhost lib]# ll total 39780 -wxr-xr-x. 3 root root 4096 May 23 21:03 amd64 -rw-r--r--. 1 root root 1218653 Mar 29 08:21 ant-javafx.jar -rw-r--r--. 1 root root 18229876 Mar 29 08:15 ct.sym -rwxr-x--x. 1 root root 159870 Mar 29 08:21 dt.jar -rw-r--r--. 1 root root 18432 Mar 29 08:15 ir.idl -rw-r--r--. 1 root root 35992 Mar 29 08:23 javafx-mx.jar -rw-r--r--. 1 root root 404452 Mar 29 08:21 jconsole.jar -rwxr-xr-x. 1 root root 10493 Mar 29 08:21 jexec drwxr-xr-x. 7 root root 4096 May 23 21:03 missioncontrol -rw-r--r--. 1 root root 640 Mar 29 08:15 orb.idl -rw-r--r--. 1 root root 4633 Mar 29 08:23 packager.jar -rw-r--r--. 1 root root 2381736 Mar 29 08:21 sa-jdi.jar -rwxr-x--x. 1 root root 18233649 May 23 21:03 tools.jar drwxr-xr-x. 6 root root 4096 May 23 21:03 visualvm [root@localhost jdk1.8.0_171-amd64]# source /etc/profile
卸载 Open JDK
有的 Linux 系统中预装了 Open JDK,所以即使上面进行了上面这些步骤,可能系统默认的 JDK 还不是 Oracle JDK,如果要真正使用 Oracle JDK,可以选择卸载 Open JDK:
[root@localhost ~]# rpm -qa | grep openjdk
java-1.8.0-openjdk-headless-1.8.0.102-4.b14.el7.x86_64
java-1.7.0-openjdk-headless-1.7.0.111-2.6.7.8.el7.x86_64
java-1.8.0-openjdk-1.8.0.102-4.b14.el7.x86_64
java-1.7.0-openjdk-1.7.0.111-2.6.7.8.el7.x86_64
[root@localhost ~]# rpm -e --nodeps java-1.8.0-openjdk
[root@localhost ~]# rpm -e --nodeps java-1.7.0-openjdk
[root@localhost ~]# rpm -e --nodeps java-1.8.0-openjdk-headless
[root@localhost ~]# rpm -e --nodeps java-1.7.0-openjdk-headless
[root@localhost ~]# rpm -qa | grep openjdk
[root@localhost ~]#
确定 Open JDK 已经完全卸载了,然后就可以为 Oracle JDK 设置环境变量了。当然,也可以不卸载 Open JDK 而直接安装 Oracle JDK,然后为 Oracle JDK 设置环境变量就行了。
使用 java -version
命令来查看我们的 java 环境变量,显示如下版本信息说明大功告成:
[root@localhost tomcat]# echo $JAVA_HOME
/usr/java/jdk1.8.0_171-amd64
[root@localhost tomcat]# java -version
java version "1.8.0_171"
Java(TM) SE Runtime Environment (build 1.8.0_171-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.171-b11, mixed mode)
[root@localhost tomcat]# javac -version
javac 1.8.0_171
[root@localhost tomcat]#