详解Java安装及环境变量配置(Windows&Linux)

前面有一篇《环境变量详解》介绍了 Windows 和 Linux 系统下的环境变量,这里介绍一下 Java 的安装及其环境变量配置。

Windows 下安装 Java

Oracle 官网上下载 JDK 的 Windows 版安装文件(下载时需要同意协议并登录 Oracle 账号),我下载的是 jdk-8u311-windows-x64.exe

image-20211030114604827.png

下载完成之后双击 exe 文件,然后按照安装向导一步步向下点击就可以了。

Windows 下配置 Java 环境变量

步骤如下:

  1. JDK 安装完毕后需要设置 JAVA 环境变量。先将 JDK 主目录添加到 JAVA_HOME 环境变量:
image-20211030115236423.png

看到这里你可能会有这样的疑问:为什么安装到了 C 盘而不是其他盘,难道不怕影响系统性能吗?哥的 C 盘是固态硬盘,安装到其他盘反而会发挥不出固态硬盘的性能(SSD 党在这里骄(zhuang)傲(bi)三秒钟,哈哈),为什么不是 Program files 默认目录呢?因为系统默认目录可能会有写权限的限制,我就把所有开发相关的软件统一安装到了一个自定义目录 softwares 中了。

  1. 然后在将 JDK 的 bin 目录添加到 Path 环境变量中.选中用户的 Path 环境变量,选择编辑按钮,在弹出的对话框中,点击新建按钮,将 %JAVA_HOME% 目录添加到 Path中:
TIM截图20171022112309.png
  1. 验证。在命令行中输入 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.jartools.jar 包含编译和运行java程序的 .class 文件。其实从 JDK 1.5 开始,JRE会自动搜索当前目录下的 .class 文件,当使用 Java 的编译和运行工具是,系统会自动加载dt.jartools.jar 中包含的 .class 文件。所以,从 JDK 1.5 开始 CLASSPATH 环境变量就不需要设置了,但是,只要设置了就必须设置为上面的值,否则编译或运行 Java 程序就会出错。

Linux 下安装 Java

通过 rpm 文件安装

Oracle 官网上下载 JDK 安装文件(下载时可能需要登录 Oracle 账号),我下载的为:jdk-8u311-linux-x64.rpm。这种方式会自动创建一些可能被其他基于 Java 程序所使用的链接文件,建议使用这种方式安装。

image.png

下载完 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 环境变量

  1. 设置系统环境变量。通过 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 查看一下配置是否正确。

  2. 更新环境变量。修改完成后,使用 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]# 
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 160,165评论 4 364
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,720评论 1 298
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,849评论 0 244
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,245评论 0 213
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,596评论 3 288
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,747评论 1 222
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,977评论 2 315
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,708评论 0 204
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,448评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,657评论 2 249
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,141评论 1 261
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,493评论 3 258
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,153评论 3 238
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,108评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,890评论 0 198
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,799评论 2 277
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,685评论 2 272