Java JDK 发行版与环境配置
Table of Contents
1. jdk 的发行版
上世纪90年代,美国 SUN 公司创造的 JAVA 在短短几年的发展后成为市场上炙手可热的语言,随后 SUN 又提出了 JavaEE 的 13 规范: JDBC,JNDI,EJB,RMI,JSP,Servlets,XML,JMS,Java IDL,JTS,JTA,JavaMail,JAF。
这里顺带提一下,还有一家公司,准确来说是一个组织,专门搞开源的,叫 Apache。这家公司搞出了一个叫 Tomcat 的服务器,但它只实现了 13 种规范中的 Servlet 和 JSP。而其他服务器比如 JBoss 和 Weblogic 啥的都完整支持了 JavaEE 的 13 个规范。所以人们往往更愿意叫 Tomcat 为轻量级服务器,也有人叫它 Servlet/JSP 容器。
后来 Oracle 收购了 Sun 公司,所以现在 java 是 Oracle 的产品。
OpenJDK 是源存储库 (也称为 OpenJDK 项目) 是基于 Mercurial 的开源存储库,托管在 http://hg.openjdk.java.net 上。绝大多数 Java 功能 (从 VM 和核心库到编译器) 仅基于这个源存储库。
openjdk 发行版是 Oracle 搞出来的,开源免费的 jdk,与 Oracle jdk 的区别是没有商业支持。
Oracle jdk 是 Oracle 圈钱用的商用 jdk,在生产环境跑收费,开发者可以免费用。但是从 Oracle jdk 12 开始没有免费版本。
AdoptOpenJDK 是完全无品牌的 OpenJDK 发行版,使用 GPL 协议,提供社区版的 OpenJDK 二进制包,可以免费商用。
与由 Oracle 的 OpenJDK 构建版本不同,这些版本至少提供 4 年的免费长期支持 (LTS) 计划。
AdoptOpenJDK 是一个社区驱动的项目,如果其他 Java 社区在 OpenJDK 源码仓库中创建和发布了安全修复程序,它们也会提供构建。
2. Windows 配 Java 环境
新建两个环境变量 - 系统变量。
变量名: JAVA_HOME
变量值: D:\DevTools\openjdk-11.0.9.1+1
变量名: CLASSPATH
变量值: .;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;
再在 Path 变量里添加两个路径:
%JAVA_HOME%\bin %JAVA_HOME%\jre\bin
3. openjdk 没有把 https 证书内置到 jdk
简单来讲,bug 是由于 $JAVA_HOME/jre/lib/security/cacerts
这个空文件导致的,里面本应该存储证书信息。
这是 bug 描述: https://github.com/AdoptOpenJDK/openjdk-build/issues/555
这个问题会导致在使用 apache http components 时候,程序进行 ssl 连接时报错:
javax.net.ssl.SSLException: java.lang.RuntimeException: Unexpected error: java.security.InvalidAlgorithmParameterException: the trustAnchors parameter must be non-empty ...... Caused by: java.lang.RuntimeException: Unexpected error: java.security.InvalidAlgorithmParameterException: the trustAnchors parameter must be non-empty ......
解决方案是从其他的发行版里拷贝一个 $JAVA_HOME/jre/lib/security/cacerts
到 openjdk 里。