Java版本安装完整指南 - marcobehler


本指南是有关如何查找和安装最新Java等的实用信息,了解Java发行版之间的差异(AdoptOpenJdk,OpenJDK,OracleJDK等)。

1. 我只想要一个下载链接,并且了解其他所有信息。我应该去哪儿?
转到AdoptOpenJDK网站,选择最新的Java版本,然后下载并安装它。然后回到本指南,也许仍然可以学习有关Java版本的一两个知识。

2.我应该使用哪个Java版本?
截至2019年9月,Java 13是最新发布的Java版本,每6个月更新一次。因此,Java 14计划于2020年3月发布,Java 15计划于2020年9月发布,以此类推。过去,Java的发布周期更长,最长可达3-5年!

随着大量新版本的推出,基本上存在以下实际使用情况:

  • 公司中的旧项目经常被Java 8所困扰(请参阅为什么公司仍被Java 8所困扰?)。因此,您也将不得不使用Java 8。
  • 有些旧项目甚至卡在Java 1.5(2004年发布)或1.6(2006年发布)上-抱歉,朋友们!
  • 如果要确保使用最新的IDE,框架和构建工具并启动新项目,则可以毫不犹豫地使用Java 11(LTS)或最新的Java 13。
  • Android开发有一个特殊领域,其中Java版本基本上停留在Java 7上,并提供了一组特定的Java 8功能。或者您切换为使用Kotlin编程语言。

3.为什么公司仍然坚持使用Java 8?
公司仍然坚持使用Java 8的原因多种多样,仅举几例:
  • 构建工具(Maven,Gradle等)和一些库最初都存在Java版本> 8的错误,并且需要更新。即使在今天,例如Java> = 9,某些构建工具在构建Java项目时也会打印出“反射访问”警告,即使构建良好,也只是“感觉未准备好”。
  • 直到Java 8为止,您几乎都在使用Oracle的JDK构建,并且您不必在乎许可。但是,甲骨文在2019年更改了许可计划,这使互联网发疯,大量文章说“ Java不再免费了”-随后出现了很多混乱。但是,这并不是真正的问题,您可以在本指南的Java Distributions部分中进行了解。
  • 一些公司制定了仅使用LTS版本并依靠其OS供应商向其提供这些版本的策略,这需要时间。

总结一下:您遇到了一系列实际问题(升级工具,库,框架)和政治问题。

4. 为什么有些Java版本(例如8)也称为1.8?
9之前的Java版本仅具有不同的命名方案。因此,Java 8也可以称为1.8,Java 5也可以称为1.5等等。当您发出“ java -version”命令时,这些版本的输出如下:

c:\Program Files\Java\jdk1.8.0_191\bin>java -version
java version "1.8.0_191" (1)
Java(TM) SE Runtime Environment (build 1.8.0_191-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.191-b12, mixed mode)

这简直就是Java8。随着Java 9切换到基于时间的发行版,命名方案也发生了变化,并且Java版本不再以1.x作为前缀。现在,版本号如下所示:

c:\Program Files\Java\jdk11\bin>java -version
openjdk version "11" 2018-09-25 (1)
OpenJDK Runtime Environment 18.9 (build 11+28)
OpenJDK 64-Bit Server VM 18.9 (build 11+28, mixed mode)

5.Java版本之间有什么区别?我应该学习特定的吗?
对于其他编程语言,并且版本之间存在重大差异,例如Python 2至3,您可能想知道是否同样适用于Java。
Java是特别在这方面,因为它是非常向后兼容。这意味着您的Java 5或8程序可以保证与Java 8-13虚拟机一起运行-除了一些您现在无需担心的例外。
例如,您的程序依赖Java 13功能,而Java 8 JVM根本不提供该功能,因此它显然无法以其他方式工作。
这意味着两件事:

  • 您不仅可以“学习”特定的Java版本,例如12。
  • 而是,直到Java 8为止,您都将在所有语言功能方面都有良好的基础。这是一个良好的基础。
  • 然后,从这样的指南中了解Java 9-13附带了哪些附加功能,并尽可能使用它们。

6.Java版本之间这些新功能的示例是什么?
看一下Java Features 8-13部分。
但根据经验:较旧,较长的发行周期(3-5年,直到Java 8)意味着每个发行版都有许多新功能。
6个月的发布周期意味着每个版本的功能要少得多,因此您可以快速掌握Java 9-13语言功能。

7.JRE和JDK有什么区别?
到目前为止,我们仅谈论“ Java”。但是Java到底是什么?
首先,您需要区分JRE(Java运行时环境)和JDK(Java开发工具包)。
从历史上看,如果您只对运行Java程序感兴趣,则仅下载JRE。JRE除其他外包括Java虚拟机(JVM)和“ java”命令行工具。
要开发新的Java程序,您需要下载JDK。JDK包括JRE拥有的所有内容,以及编译器javac和其他几个工具,例如javadoc(Java文档生成器)和jdb(Java Debugger)。
直到Java 8为止,Oracle网站都将JRE和JDK作为单独的下载提供-尽管JDK始终始终在单独的文件夹中包含JRE。在Java 9中,这种区别基本上已经消失了,并且您总是在下载JDK。JDK的目录结构也已更改,不再具有显式的JRE文件夹。
因此,即使某些发行版(请参阅Java发行版部分)仍提供单独的JRE下载,似乎仍存在仅提供JDK的趋势。因此,从现在开始,我们将交替使用Java和JDK。

8.那我该如何安装Java或JDK呢?
目前,请忽略Java-Docker镜像,.msi包装器或特定于平台的软件包。最后,Java只是一个.zip文件,仅此而已。
因此,将Java安装到计算机上所需要做的就是解压缩jdk- {5-13} .zip文件。您甚至不需要管理员权限。
您解压缩后的Java文件如下所示:

Directory C:\dev\jdk-11

12.11.2019  19:24    <DIR>          .
12.11.2019  19:24    <DIR>          ..
12.11.2019  19:23    <DIR>          bin
12.11.2019  19:23    <DIR>          conf
12.11.2019  19:24    <DIR>          include
12.11.2019  19:24    <DIR>          jmods
22.08.2018  19:18    <DIR>          legal
12.11.2019  19:24    <DIR>          lib
12.11.2019  19:23             1.238 release

魔术发生在/ bin目录中,在Windows下看起来像这样:

Directory C:\dev\jdk-11\bin
...
12.11.2019  19:23           272.736 java.exe
...
12.11.2019  19:23            20.832 javac.exe
...

因此,您所需要做的就是解压缩该文件并将/ bin目录放在PATH变量中,以便可以从任何地方调用“ java”命令。
(如果您想知道,GUI安装程序(例如来自Oracle或AdoptOpenJDK的GUI安装程序)将为您解压缩并修改PATH变量。
要验证您是否正确安装了Java,则只需运行“ java -version”。如果输出看起来像下面的输出,那就很好了。

openjdk version "11" 2018-09-25
OpenJDK Runtime Environment 18.9 (build 11+28)
OpenJDK 64-Bit Server VM 18.9 (build 11+28, mixed mode)

现在剩下一个问题:您从哪里获得Java .zip文件?这将我们带到了发行主题。

Java发行版
有许多提供Java下载的站点(阅读:JDK),目前尚不清楚“谁提供什么许可以及哪种许可”。
1.OpenJDK项目
在Java源代码方面(读:你的JRE / JDK的源代码),也只有一个,生活在OpenJDK项目现场。
但是,这只是源代码,而不是可分发的内部版本(请考虑:您的.zip文件以及针对特定操作系统的已编译Java命令)。从理论上讲,您和我可以从该源代码生成一个内部版本,将其命名为MarcoJDK,然后开始分发它。但是我们的发行版将缺乏认证,无法合法地称自己为Java SE兼容。
这就是为什么在实践中,有少数供应商实际上创建了这些构建,并通过了认证(请参阅TCK),然后进行分发。
而且,尽管供应商无法在生成新的Java构建之前从String类中删除方法,但他们可以添加商标(是!)或添加他们认为有用的其他实用程序(例如CLI)。但是除此之外,所有 Java发行版的原始源代码都是相同的。

2. OpenJDK构建(由Oracle)和OracleJDK构建
从源代码构建Java的供应商之一是Oracle。这导致了两个不同的Java发行版,一开始可能会非常混乱。

  1. OpenJDK由Oracle(!)构建。这些版本是免费的且没有商标,但Oracle不会在Java 14推出后立即发布Java 13等旧版本的更新。
  2. OracleJDK是品牌的商业版本,从2019年许可证更改开始。这意味着它可以在开发中免费使用,但是如果在生产中使用Oracle,则需要付费。为此,您将获得更长的支持,即,如果JVM发疯,则可以更新版本和电话号码。

现在,从历史上讲(Java 8之前的版本),OpenJDK构建和OracleJDK构建之间存在实际的源差异,您可以说OracleJDK是“更好”的。但是到今天为止,这两个版本基本上是相同的,只是有微小的差异
然后归结为您想要安装的Java版本的付费商业支持(电话号码)。

AdoptOpenJDK
2017年,一组Java用户组成员,开发人员和供应商(亚马逊,微软,Pivotal,Redhat等)建立了一个名为AdoptOpenJDK的社区。
它们提供了免费的,坚如磐石的OpenJDK构建,具有更长的可用性/更新,甚至为您提供了两种不同的Java虚拟机的选择:HotSpotOpenJ9
如果您要安装Java,强烈建议。

Azul Zulu,Amazon Corretto,SAPMachine
您可以在OpenJDK Wikipedia站点上找到OpenJDK构建的完整列表。其中包括Azul ZuluAmazon Corretto以及SapMachine等。为了简化起见,可以归结为您拥有不同的支持选项/维护保证。
但是,请务必查看各个网站,以了解每种发行版本的优势。

建议
要从头开始重申,除非您有非常特殊的要求,否则请在2019年从https://adoptopenjdk.net获取jdk.zip(.tar.gz / .msi / .pkg)文件或选择提供的软件包由您的操作系统供应商提供。