上世纪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 源码仓库中创建和发布了安全修复程序,它们也会提供构建。
新建两个环境变量 - 系统变量。
D:\DevTools\openjdk-11.0.9.1+1
.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;
再在 Path 变量里添加两个路径:
%JAVA_HOME%\bin
%JAVA_HOME%\jre\bin
简单来讲,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 里。
去官网下载最新的压缩包,解压到本地。
比如解压路径为 D:\DevTools,解压后的文件夹为 D:\DevTools\apache-maven-3.6.3。
添加 D:\DevTools\apache-maven-3.6.3\bin 到 环境变量 -> 系统变量 -> Path 。
可以 sudo apt install maven
完成安装。
也可以从官网下载二进制包:
curl -O https://mirrors.tuna.tsinghua.edu.cn/apache/maven/maven-3/3.6.3/binaries/apache-maven-3.6.3-bin.tar.gz
tar xzvf apache-maven-3.6.3-bin.tar.gz -C /opt
sudo ln -s /opt/apache-maven-3.6.3/bin/mvn /usr/bin
在 /usr/bin 目录下创建软链接指向 mvn 文件。或者 export PATH=/opt/apache-maven-3.6.3/bin:$PATH
将 bin 目录添加到环境变量。
maven 共提供了三个级别的配置,优先级依次递增,分别是:
使用中最常见的是进行用户层级的配置,其它配置层级一般使用默认配置,具体内容可参看官方文档。
Maven 默认使用国外的镜像,下载依赖包的速度很慢,最好换成国内源。
从 D:\DevTools\apache-maven-3.6.3\conf\settings.xml 找到 Maven 的配置文件。
在把 159 后的内容变为:
<mirror>
<id>alimaven</id>
<mirrorOf>central</mirrorOf>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/repositories/central/</url>
</mirror>
首先修改 pom.xml,加入插件。如下内容。
<build>
<pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
<plugins>
......
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<version>3.3.0</version>
<configuration>
<!--加上入口类,比如 cn.gridsah.App,可生成能直接运行的jar包-->
<archive>
<manifest>
<mainClass>cn.gridsah.App</mainClass>
</manifest>
</archive>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
</plugin>
......
</plugins>
</pluginManagement>
</build>
在项目根目录下执行 mvn assembly:assembly
,成功后会在 target 文件夹下多出一个以 -jar-with-dependencies.jar 结尾的包. 这个包中包含了被依赖的所有 jar 包的 CLASS,并且可以执行。