赞
踩
Java的开发环境配置其实并不复杂,也是下载安装-环境变量-终端测试版本这个过程。问题在于Java有巨多的不好辨析的概念,如OpenJDK,OracleJDk,JavaSE,JavsEE,JavaME等等。其实它们理解起来也不复杂。
事情的渊源还得从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项目衍生出来的,只是它们在协议,接口等等方面有些许差别。
JavaSE : Java Standard Edition 的缩写,即Java标准版本,俗称JDK
JavaEE : Java Platform Enterprise Edition 的缩写,即Java 平台企业版,在JavaSE上添加了一套接口和标准,多用于企业级开发,包括web开发。
JavaME : Java Micro Edition,即Java微型版本,是JavaSE的删减版本,多用于移动设备如手机,机顶盒开发。
不建议直接用原版的OpenJDK。
并不是上面表格中Yes越多越好
个人推荐以有对应操作系统安装包的优先,如debian系统的.deb包等等,主要原因在于使用安装包便于卸载配置等,并且有些安装包会替你设置环境变量(开箱即用!),其次,部分Java应用程式通过检测注册表来检测Java的位置,使用安装包会有极大的简便性,
最终还是根据个人的需求选,如架构,需求的JDK版本。Alibaba的DragonWell就只有JDK8和JDK11。
我个人比较推荐BellSoft的JDK(Full版本),AdoptiumJDK,AmazonJDK,排名即推荐程度。它们共同特征为:安装包提供,JDK版本多,国内下载快。
======== 2024.3.22更新 ========
Bellsoft因为某些原因关闭了一部分JDK的下载,目前只有Standard版本可供下载。除此以外,经过我的长期体验来看,我可以做一些其他的推荐。
如果你对稳定性,性能(其实这个差别不大)有相当的要求,可以选择Corretto,其作为亚马逊官方出产的OpenJDK你大可以相信它的使用体验,并且Corretto同样提供多架构,多操作系统和多版本的支持。
如果你对开源有比较高的要求,可以选择Adoptium,它来自Java开源大户Eclipse,后者甚至把Adoptium的网站都开源在Github上了,同样提供多架构,多操作系统和多版本的支持,但是它的官网下载是直通Github并且跳过个人验证的,意味着你不能使用镜像站进行加速,不过好在清华开源镜像站做了Adoptium的镜像,你可以直接百度找到(清华开源镜像站的支持让Adoptium的下载速度极其可观)。
如果你对JDK组件有一些特别的要求,比如JavaFX,CRaC等,你可以选择Zulu(也只能选这个了,上面两家的JDK都没有这方面的专门版本),Zulu来自azul(JDK社区的长期高质量贡献者),完全有使用和质量的保障,并且Zulu有多个构建版本,如专门集成了JavaFX的版本和同时集成JavaFX和CRaC的版本,同样提供多架构,多操作系统和多版本的支持,下载速度和网页访问速度也并非完全隔绝国内用户,是我个人最推荐的JDK vendor。
================================
以BellSoftJDK为例子
下载官网的msi安装包,进行安装。
之后进行环境配置(BellSoft的JDK会直接帮你添加环境变量,如果不嫌麻烦可以不管,我这里选择直接删掉)
在系统变量中新建JAVA_HOME
,全大写,一些软件默认通过JAVA_HOME环境变量获得JDK,如果你有多个JDK,可以像我这样配置,这样只需要很简单的更改就可以切换全局JDK。
记得在Path里声明以下,这个Path以后就不用动了,直接操作JAVA_HOME
之后还是cmd检测一下:
如果有安装包就直接安装包,没有就找个地方解压一下,反正最后要得到一个文件夹。
如果是使用安装包安装,可以直接跳过注册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
快捷切换编译器:
之后还可以添加以下环境变量,打开~/.bashrc
文件,向文件中直接加入以下内容。
注意一定要有这个/
需要注意的是,这个环境变量不会影响update-alternatives --config javac
的选项,你选了jdk8,编译器输出还是jdk8,不会因为是jdk17的java_home改变。
如果用的是zsh,并且比较有手法,还可以在.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的Java插件有时候不吃JDK,这个时候需要手动配置一下:
Linux和Windows是一样的
如果有多个JDK可以这样配置,其中标注为default的是默认使用JDK
============ 2024.3.22更新 ============
目前VSCode的Java插件发生了更新,“java.home"属性改名成了"java.jdt.ls.java.home”,言下之意是应该这样配置:
====================================
========== 2024.4.3更新 ==========
抽空查看了一下IDEA的源代码,发现了它检测JDK版本的机制。
首先它会通过调用的方式获取Java版本信息的输出,如对于JDK8会在/lib/rt.jar中读取:
之后会对返回的字符串进行分析,获取Vendor信息和版本信息,下面的一部分代码可以看到这个实现的过程,最下面一部分可以看到已经在配对一些版本了:
最后,这是IDEA所能识别(我理解为JetBrains的官方支持或推荐)的JDK版本:
=========================================================
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。