前言
Java的开发环境配置其实并不复杂,也是下载安装-环境变量-终端测试版本这个过程。问题在于Java有巨多的不好辨析的概念,如OpenJDK,OracleJDk,JavaSE,JavsEE,JavaME等等。其实它们理解起来也不复杂。
1.JDK这么多名字?有什么区别?
事情的渊源还得从Java发展历史说起。简单来说,以前Java是Sun公司管的,后来Orcale公司接管了Java,并继续更新Java,Oracle公司发行的Java就被称为OracleJDK,再后来,Oracle公司开源了Java,建立了OpenJDK项目,这个项目也就是后来的OpenJDK。也就是说OracleJDK和OpenJDK是一家公司的
,它们殊途同归,至少在代码层面上它们的差别微乎其微。较大的差别在许可证:
OpenJDK根据许可证GPL v2发布
OracleJDK根据Oracle二进制代码许可协议获得许可。
OpenJDK项目首页
OpenJDK下载页
OracleJDK首页
后来,更多的公司参与了OpenJDK的维护中,各大互联网公司也发布了有自己商业标准的JDK,如下:
Build | LTS | 宽松式许可证 | TCK 测试 | 未修改上游的构建 | 提供商业支持 |
---|---|---|---|---|---|
AdoptOpenJDK | Yes | Yes | No | 可选 | 可选(IBM) |
Alibaba Dragonwell | Yes | Yes | Yes | No | No |
Amazon Corretto | Yes | Yes | Yes | No | 可选 (on AWS) |
Azul Zulu | Yes | Yes | Yes | No | 可选 |
BellSoft Liberica JDK | Yes | Yes | Yes | No | 可选 |
Huawei bisheng JDK | Yes | Yes | Yes | No | No |
IBM Java SDK | Yes | No | Yes | No | Yes |
Microsoft Build of OpenJDK | Yes | Yes | Yes | No | No (beta) |
ojdkbuild | Yes | Yes | No | Yes | No |
OpenLogic OpenJDK | Yes | Yes | Yes | No | 可选 |
Oracle GraalVM Community Edition | No | Yes | Yes | No | No |
Oracle GraalVM Enterprise Edition | Yes | No | Yes | No | Yes |
Oracle Java SE | Yes | No | Yes | No | Yes |
Oracle OpenJDK | No | Yes | Yes | Yes | No |
Red Hat build of OpenJDK | Yes | Yes | Yes | No | Yes |
Tencent Kona | Yes | Yes | Yes | No | No |
SAP SapMachine | Yes | Yes | Yes | No | 可选 (for SAP products) |
LTS:"Long Term Support"的简写,即长期支持版本
TCK:OpenJDK项目提供的一种测试,其实不怎么重要
总而言之,不管什么JDK,某种程度上都可以说是OpenJDK项目衍生出来的,只是它们在协议,接口等等方面有些许差别。
2.JavaEE JavaSE JavaME各是什么?
JavaSE : Java Standard Edition 的缩写,即Java标准版本,俗称JDK
JavaEE : Java Platform Enterprise Edition 的缩写,即Java 平台企业版,在JavaSE上添加了一套接口和标准,多用于企业级开发,包括web开发。
JavaME : Java Micro Edition,即Java微型版本,是JavaSE的删减版本,多用于移动设备如手机,机顶盒开发。
3.怎么选JDK?
不建议直接用原版的OpenJDK。
并不是上面表格中Yes越多越好
个人推荐以有对应操作系统安装包的优先,如debian系统的.deb包等等,主要原因在于使用安装包便于卸载配置等,并且有些安装包会替你设置环境变量(开箱即用!),其次,部分Java应用程式通过检测注册表来检测Java的位置,使用安装包会有极大的简便性,
最终还是根据个人的需求选,如架构,需求的JDK版本。Alibaba的DragonWell就只有JDK8和JDK11。
我个人比较推荐BellSoft的JDK(Full版本),AdoptiumJDK,AmazonJDK,排名即推荐程度。它们共同特征为:安装包提供,JDK版本多,国内下载快。
4.JDK安装和配置
以BellSoftJDK为例子
Windows
下载官网的msi安装包,进行安装。
之后进行环境配置(BellSoft的JDK会直接帮你添加环境变量,如果不嫌麻烦可以不管,我这里选择直接删掉)
在系统变量中新建JAVA_HOME
,全大写,一些软件默认通过JAVA_HOME环境变量获得JDK,如果你有多个JDK,可以像我这样配置,这样只需要很简单的更改就可以切换全局JDK。
记得在Path里声明以下,这个Path以后就不用动了,直接操作JAVA_HOME
之后还是cmd检测一下:
Linux
如果有安装包就直接安装包,没有就找个地方解压一下,反正最后要得到一个文件夹。
如果是使用安装包安装,可以直接跳过注册update-alter这一步,如果是zip安装,则需要手动注册一下对应jdk的update-alter。参考文章
update-alternatives --install /usr/bin/java java /example/jdk-1.8/bin/java 100 ##最后面的数字大小表示优先级
update-alternatives --install /usr/bin/java java /example/jdk-11/bin/java 200 ##倒数第二个参数是JDK目录
update-alternatives --install /usr/bin/java java /example/jdk-17/bin/java 300 ##其它的不用动
update-alternatives --install /usr/bin/javac javac /example/jdk-1.8/bin/javac 100
update-alternatives --install /usr/bin/java javac /example/jdk-11/bin/javac 200
update-alternatives --install /usr/bin/javac javac /example/jdk-17/bin/javac 300
无论如何,都可以使用update-alternatives --config javac
和update-alternatives --config java
快捷切换编译器:
之后还可以添加以下环境变量,在~/.zshrc
和~/.bashrc
都可以,不建议直接配全局。
需要注意的是,这个环境变量不会影响update-alternatives --config javac
的选项,你选了jdk8,编译器输出还是jdk8,不会因为是jdk17的java_home改变。
注意一定要有这个/
如果比较有手法,还可以在.zshrc里使用alias缩写快捷切换java和javac版本。
alias changejdk8="echo 2 | sudo update-alternatives --config java && echo 2 | sudo update-alternatives --config javac && java -version && javac -version"
题外话:VSCode配置
VSCode的Java插件有时候不吃JDK,这个时候需要手动配置一下:
Linux和Windows是一样的
如果有多个JDK可以这样配置,其中标注为default的是默认使用JDK