目录

安装 JDK

Java Development Kit(JDK)是Sun微系统针对Java开发人员发布的免费软件开发工具包(SDK,Software development kit)。自从Java推出以来,JDK已经成为使用最广泛的Java SDK。由于JDK的一部分特性采用商业许可证,而非开源。因此,2006年Sun微系统宣布将发布基于GPL的开源JDK,使JDK成为自由软件。在去掉了少量闭源特性之后,Sun微系统最终促成了GPL的OpenJDK的发布。

作为Java语言的SDK,普通用户并不需要安装JDK来运行Java程序,而只需要安装JRE(Java Runtime Environment)。而程序开发者必须安装JDK来编译、调试程序。

  • javac:编译器,将后缀名为.java的源代码编译成后缀名为“.class”的字节码
  • java:运行工具,运行.class的字节码
  • jar:打包工具,将相关的类文件打包成一个文件
  • javadoc:文档生成器,从源码注释中提取文档,注释需符合规范
  • jdb debugger:调试工具
  • jps:显示当前java程序运行的进程状态
  • javap:反编译程序
  • appletviewer:运行和调试applet程序的工具,不需要使用浏览器
  • javah:从Java类生成C头文件和C源文件。这些文件提供了连接胶合,使Java和C代码可进行交互。
  • javaws:运行JNLP程序
  • extcheck:一个检测jar包冲突的工具
  • apt:注释处理工具
  • jhat:java堆分析工具
  • jstack:栈跟踪程序
  • jstat:JVM检测统计工具
  • jstatd:jstat守护进程
  • jinfo:获取正在运行或崩溃的java程序配置信息
  • jmap:获取java进程内存映射信息
  • idlj:IDL-to-Java编译器。将IDL语言转化为java文件

macOS

1
2
# 列出本地安装的 JDK 版本
/usr/libexec/java_home -V

Oracle JDK 8

JDK 8 没有 homebrew 安装了,直接去官网下载安装。

1
2
3
# https://www.oracle.com/java/technologies/downloads/#java8
# 需要注意的是,这里仅仅安装了 java 的 pkg 文件,你还需要进入对应的目录,执行这个 pkg 文件来完成安装。
# https://www.azul.com/downloads/ 刚出 M1 的时候 arm jdk8 zulu 更新很及时。现在官方提供的 Oracle JDK 8 支持 ARM。

OpenJDK

1
2
3
4
brew search jdk
brew info jdk
# 安装 OpenJDK 最新版本
brew install jdk

多版本管理

Mac OSX 10.5 之后苹果就建议设置 $JAVA_HOME 变量到 /usr/libexec/java_home,添加完毕之后,按esc退出插入模式,并键入wq!保存退出文件。

环境变量

1
2
3
export JAVA_HOME=$(/usr/libexec/java_home)
export PATH=$JAVA_HOME/bin:$PATH
export CLASS_PATH=$JAVA_HOME/lib
1
2
3
# 切换版本
/usr/libexec/java_home -v 1.8
/usr/libexec/java_home -v 17

添加以下脚本到当前 shell 配置文件中:~/.zshrc

1
2
3
4
5
6
7
function setjdk() {
    export JAVA_HOME=`/usr/libexec/java_home -v $@`
}

function jdk8(){
  setjdk 1.8
}

这样我们就可以通过输入一条命令进行版本切换了:

1
setjdk 1.8

Ubuntu 20.04

Oracle Java 17 LTS (JDK 17)

APT PPA(Personal Package Archives) Method

1
2
3
4
5
6
7
8
# Update Ubuntu System
sudo apt update && sudo apt upgrade -y
sudo add-apt-repository ppa:linuxuprising/java -y
sudo apt update
sudo apt-get install oracle-java17-installer oracle-java17-set-default

# 卸载
sudo apt autoremove oracle-java17-installer oracle-java17-set-default --purge

DPKG(Dependency Packages) Method

1
2
3
4
5
6
sudo apt install libc6-i386 libc6-x32 curl -y
wget https://download.oracle.com/java/17/latest/jdk-17_linux-x64_bin.deb
sudo dpkg -i jdk-17_linux-x64_bin.deb

# 删除
sudo dpkg -r jdk-17

手动安装

1
2
3
4
sudo apt install libc6-i386 libc6-x32 curl -y
curl  -O https://download.oracle.com/java/17/latest/jdk-17_linux-x64_bin.tar.gz
tar -xvf jdk-17_linux-x64_bin.tar.gz
sudo mv jdk-17.{version} /opt/jdk17

环境变量 vim ~/.zshrc

1
2
export JAVA_HOME=/opt/jdk17
export PATH=$PATH:$JAVA_HOME/bin
1
2
java --version
echo $JAVA_HOME

Oracle JDK 8

PPA

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
# 如果没有 add-apt-repository 就 apt-get install software-properties-common
# 添加ppa
sudo add-apt-repository ppa:webupd8team/java
sudo apt-get update
sudo apt-get install oracle-java8-installer
#查看版本
java -version
#设置 Java 8 环境变量
sudo apt-get install oracle-java8-set-default
#java版本切换
sudo update-java-alternatives -s java-8-oracle
#卸载jdk
sudo apt-get remove oracle-java8-installer

安装器会提示你同意 oracle 的服务条款,选择 ok,然后选择yes 即可

安装包安装

https://www.oracle.com/java/technologies/javase-jdk8-downloads.html

1
2
3
4
5
6
sudo su
cd /usr/local
wget --no-check-certificate --no-cookies --header "Cookie: oraclelicense=accept-securebackup-cookie"  https://www.oracle.com/webapps/redirect/signon?nexturl=https://download.oracle.com/otn/java/jdk/8u271-b09/61ae65e088624f5aaa0b1d2d801acb16/jdk-8u271-linux-x64.tar.gz
tar -zxvf jdk-8u251-linux-x64.tar.gz
rpm -ivh jdk-8u251-linux-x64.rpm
vim /etc/profile
JAVA_HOME=/usr/java/jdk1.8.0_251-amd64
CLASSPATH=%JAVA_HOME%/lib:%JAVA_HOME%/jre/lib
export PATH=$PATH:$JAVA_HOME/bin
1
source /etc/profile

OpenJDK 8

1
2
3
4
apt-cache search java | grep jdk
apt-get install openjdk-8-jdk
# 切换版本
sudo update-alternatives --config java

Ubuntu 系统上的多个 Java 版本

在 Ubuntu 上管理同一软件的多个版本的标准方法是通过 Debian Alternatives System。大多数时候,我们通过update-alternatives程序创建、维护和显示替代方案。

1
2
3
update-alternatives --display java
# 交互式选择默认
sudo update-alternatives --config java

CentOS 

Oracle JDK 官网

rpm 方式安装

推荐方式

卸载

1
2
3
4
5
6
7
8
9
# 查看是否内置OpenJDK
java -version
# 删除自带Open JDK
yum -y remove java*
# rpm 方式卸载
rpm -qa|grep jdk
# -e 卸载 -vh 展示详细信息和进度
rpm -evh --nodeps jdk1.8.0_144-1.8.0_144-fcs.x86_64
rpm -evh --nodeps java-1.8.0-openjdk-1.8.0.141-1.b16.el7_3.x86_64

安装

1
2
3
4
5
6
7
sudo su
cd /usr/local
# 用rpm安装JDK
# yum install wget
wget --no-check-certificate --no-cookies --header "Cookie: oraclelicense=accept-securebackup-cookie"  http://download.oracle.com/otn-pub/java/jdk/8u171-b11/512cd62ec5174c3487ac17c61aaa89e8/jdk-8u171-linux-x64.rpm

rpm -ivh jdk-8u171-linux-x64.rpm

查看

1
2
3
4
5
6
7
8
rpm -qa|grep jdk
java -version
which java
# 在/usr/bin目录下创建一个符号链接,指向/etc/alternatives/ 下的的文件,而该文件依然是一个符号链接
ll /usr/bin/java
#lrwxrwxrwx 1 root root   16 Jul 19 11:58 default -> /usr/java/latest
#drwxr-xr-x 9 root root 4096 Jul 19 11:58 jdk1.8.0_91
#lrwxrwxrwx 1 root root   21 Jul 19 11:58 latest -> /usr/java/jdk1.8.0_91

有两个软链接defaultlatest。这样,我们设置java目录的时候(比如环境变量JAVA_HOME),就可以设置成default。修改java版本的时候,只需要修改latest指向的文件夹就行了。

环境变量

vi /etc/profile

export JAVA_HOME=/usr/java/default
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$JAVA_HOME/bin:$PATH

source /etc/profile

1
2
# 切换java版本
alternatives --config java

手动解压 JDK

1
2
3
4
sudo su
cd /usr/local
wget --no-check-certificate --no-cookies --header "Cookie: oraclelicense=accept-securebackup-cookie"  http://download.oracle.com/otn-pub/java/jdk/8u171-b11/512cd62ec5174c3487ac17c61aaa89e8/jdk-8u171-linux-x64.tar.gz
tar -zxvf jdk-8u171-linux-x64.tar.gz

vi /etc/profile

export JAVA_HOME=/usr/local/jdk1.8.0_171
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

source /etc/profile

yum 方式安装

只有 OpenJDK

1
2
yum search java | grep jdk
yum install java-1.8.0-openjdk

配置环境变量即可

测试

1
code hello.java
1
2
3
4
5
public class hello {
  public static void main(String[] args) {
    System.out.println("Hello World!");
  }
}
1
2
jvac hello.java
java hello

附录