关于 Java 许可和发行版仍然有许多误区,我也参与其中。在我任职的大学,关于如何选择 Java 版本和确定更新策略仍然存在争议。Oracle 渥太华总监 Donald Smith 对此进行了澄清,可能类似的澄清已经不下100次了。本文汇总了我对相关问题的总结。
1. 应该使用哪个 Java 发行版?
<https://jdk.java.net> 发行版除了最新的 JDK,还包含每季度的安全更新。它通过了 TCK 认证、质量测试,是一个可用于生产的开源 JDK。就 Java 11 来看,这个代码库与非开源授权的 Oracle JDK 一样。可以通过上面链接中的介绍了解二者的区别。当然,你仍然可以从 Oracle 技术网络(OTN)上下载 Java 并且免费用来个人开发或者培训。尽管如此,如果对发布 Java 产品有顾虑,可以使用 <https://jdk.java.net> 发行版,并推荐给你的客户使用。
还有许多其他渠道得到 JDK,比如各种 Linux 发行版、硬件供应商、独立软件供应商(ISV)以及其他支持供应商,可以根据自己的需要进行选择。稍后会对此详细讲解。
2. 长期支持(LTS)意味着什么?
Oracle 对 LTS 版本提供付费支持,包括 Java 7、8和11,并持续相当长的一段时间。Java 11 的付费支持会持续到2026年。Oracle 还为像 Java 12 这样的非 LTS 版本提供商业支持,前提是不被新版本取代。更多信息,请参见 <https://www.oracle.com/technetwork/java/java-se-support-roadmap.html>
3. Java 6个月的版本迭代意味着什么?
每年的三月和九月 Java 都会发布一个新特性,这打破了像之前 Java 8 这样的传统发布周期。Java 8 的最新版本是 212,这个数字不是发布的版本号。尽管如此,仍然有许多 Java 8 版本包含了新特性。6个月的发布周期现在用来发布补丁、修复 Bug 和更新。
我在 Twitter 上与 Oracle Java 语言首席架构师 Brian Goetz 进行了简短交流,他确认了 Java 向前兼容的承诺。如果用 Java 8 开发了代码,可以放心地在 Java 13 上运行。如果你正在为一个 Java 11 项目寻找新的开发者,面试者告诉你他们通过了 Java 13 培训,那么可以招聘。
4. 业界不是不考虑使用 LTS 版本以外的东西吗?
起初是这样的,但这仅仅因为自身的误解和受到错误的言论影响。就像过去听说有新版本时,你就会更新到新的 Java 8 一样,区别在于现在有一张可预测、有规律的时间表。这与现代应用开发实践以及其他平台的做法一致。这些平台更希望看到频繁更新但可管理,而不是每3到4年发生一次结构性改变。这有助于 Java 继续成为云计算头号开发平台。
5. 我主要在 Web 服务器上开发,它们不是都需要 Java 8 吗?
目前,IBM Open Liberty 和 RedHat Wildfly 的最新版本都在 Java 12 上运行,其他版本也支持 Java 12。我的非正式测试都运行在 Java 12 编译的 Servlet 和 JSF 应用上,但是 Maven 中编译器会设置 target 设为 1.8。结果证明,即使服务器、Payara 都在 Java 8 上运行也没有出现任何问题。
6. 那么其他的 Java 发行版呢?
Amazon、SAP、Azul、RedHat、Bellsoft 和 AdoptOpenJDK 等都提供 Java 发行版,这里只列举了一些。唯一显著的区别在于,<https://jdk.java.net> 只提供 .zip 或 .gz 文件,其他会提供安装包。它们几乎都是从相同的源代码构建的。Java 无需安装,只要解压然后配置应用程序、IDE 或者操作系统知道 Java 安装路径即可使用。安装包的作用就是解压,然后替你写入系统配置。这些公司的发行版只是为 Oracle 付费版增加了一个选项,或者针对 Intel 或 AMD 以外的某个平台提供特定版本,比如 ARM。这些公司已经做了很多年,比如 2008 年开始 Red Hat 就提供了 Java 6 的 OpenJDK 发行版。
7. 结论
如果你刚开始学习 Java 编程,就使用最新版。如果你正在使用 Java 开发,就升级到最新版。如果你担心 Oracle 的授权协议或者更喜欢开源,就从 <https://jdk.java.net> 下载 Java,否则就从 OTN 下载。
致谢:本文撰写时得到了 Donald Smith 的支持。
编译:ImportNew/唐尤华
原文链接:OK, Java Is Still Free, But Which Version Do I Use and Recommend to My Clients? - DZone Java