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
}
|
这样我们就可以通过输入一条命令进行版本切换了:
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
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
|
有两个软链接default
和latest
。这样,我们设置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
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
|
附录