腾讯Kona JDK

腾讯Kona JDK(后文简称为Kona)是腾讯的OpenJDK发行版。它基于腾讯内外部的海量业务,针对大数据,云计算,机器学习和安全等多个领域进行了广泛扩展与深度优化。该发行版支持OpenJDK的全部长期支持(LTS)版本,包括8,11,17和21。它还支持主流的操作系统平台,包括Linux x64,Linux aarch64,Windows x64,macOS x64和macOS aarch64。获悉更多信息,请访问Kona的GitHub主页:https://tencent.github.io/konajdk

如何获取

从GitHub下载

Kona的开源仓库主要是在GitHub Tencent帐户下。它的4个LTS版本分别对应4个仓库,地址分别是:

https://github.com/Tencent/TencentKona-8

https://github.com/Tencent/TencentKona-11

https://github.com/Tencent/TencentKona-17

https://github.com/Tencent/TencentKona-21

用户可以在这些仓库的releases页面中找到对应各个平台和格式的二进制文件,例如,https://github.com/Tencent/TencentKona-8/releases

从cnb.cool下载

出于对中国用户可能无法访问GitHub的担忧,Kona在cnb.cool上备份了代码仓库,地址分别是:

https://cnb.cool/tencent/TencentKona/TencentKona-8

https://cnb.cool/tencent/TencentKona/TencentKona-11

https://cnb.cool/tencent/TencentKona/TencentKona-17

https://cnb.cool/tencent/TencentKona/TencentKona-21

类似地,二进制文件也对应地列在了上述仓库的releases页面中,例如,

https://cnb.cool/tencent/TencentKona/TencentKona-8/-/releases

通过Docker镜像

除了直接下载Kona的二进制文件,拉取已预安装了Kona二进制文件的Docker镜像也是一种常用的获取Kona的方式。

目前仅提供了Kona 8和11的Docker镜像,支持了腾讯的Linux发行版TencentOS Server(TS)和Alpine Linux,以及CPU架构x86_64和aarch64。例如,下面的命令会拉取基于TS且CPU架构为x86_64的Kona 8镜像。

$ docker pull konajdk/konajdk:8-tlinux

关于Kona Docker镜像的详细信息,请查看DockerHub:https://hub.docker.com/r/konajdk/konajdk/tags

通过SDKMAN下载

SDKMAN是一个流行的SDK安装与管理工具。它支持各种SDK,包括多种OpenJDK发行版,也支持Kona。由于Kona有4个LTS版本,而每个LTS版本在每个季度又会发布更新版本,这使得发布版本众多。而开发中经常需要安装多个不同的版本,且会在不同的版本之间切换使用。使用SDKMAN来安装和管理Kona就不需要关注过多的细节,在不同的版本之间切换使用也十分简单。

先通过下面的命令列出已发布的Kona版本,

$ sdk list java | grep kona
 Tencent       |     | 21.0.7       | kona    |            | 21.0.7-kona
...
               |     | 17.0.15      | kona    |            | 17.0.15-kona
...
               |     | 11.0.27      | kona    |            | 11.0.27-kona
...
               |     | 8.0.452      | kona    |            | 8.0.452-kona
...

然后使用下面的命令去安装指定的版本(如Kona 17.0.15),

$ sdk install java 17.0.15-kona
...
Do you want java 17.0.15-kona to be set as default? (Y/n): Y
Setting java 17.0.15-kona as default.

再次列出Kona版本时会发现已经安装了Kona 17.0.15,并且它被设置为当前默认版本。

Tencent       |     | 21.0.7       | kona    |            | 21.0.7-kona
...
               | >>> | 17.0.15      | kona    | installed  | 17.0.15-kona
...

SDKMAN实际上还是下载的Kona GitHub仓库releases页面展示的二进制文件。关于SDKMAN的使用细节,请参考官方文档:https://sdkman.io/usage

在平台/工具中使用

在GitHub Actions中使用

GitHub官方提供了一个称之为Actions的CI/CD平台,它允许开发者基于GitHub仓库自动化地执行构建、测试、部署等任务,其核心要素是Workflow(工作流配置)和Action(可复用的任务单元)。该平台被GitHub上的开源项目广泛应用。腾讯内外的一些开源项目在开发时是基于Kona,其中还会使用到Kona的独有特性,比如国密算法与协议。这就要求能够在Actions平台中使用Kona。为此,腾讯向GitHub Marketplace发布了一款名为setup-tencent-kona的Action实现。

setup-tencent-kona是对GitHub官方Action setup-java的扩展,所以它的使用方式与setup-java完全相同。下面是两个示例,

● 示例1:使用Kona 8的最新版本

steps:
- name: Setup Kona JDK
  uses: Tencent/setup-tencent-kona@v4
  with:
    distribution: 'kona'
    java-version: 8

●示例2:使用Kona全部LTS版本的最新版本

strategy:
matrix:
  java-version: [8, 11, 17, 21]
steps:
- name: Setup Kona JDK
  uses: Tencent/setup-tencent-kona@v4
  with:
    distribution: 'kona'
    java-version: ${{ matrix.java-version }}

关于更详细的使用方法,请参考文档:

https://github.com/Tencent/setup-tencent-kona/blob/main/docs/advanced-usage.md

在Gradle Toolchain中使用

默认情况下,若使用某个JDK去运行Gradle,Gradle就会用这个JDK去执行Java工程中的各类任务,比如编译和测试。但在遇到如下场景时,这种工作方式就对开发者不友好了。

● 同一个环境中存在多个Gradle工程,它们依赖于不同的Java语言版本,甚至是不同的JDK发行版。在对这些工程执行Gradle任务时,需要经常切换当前环境中的JDK,比如修改环境变量JAVA_HOME的值。

● 即便只有一个Gradle工程,若它声明能够同时支持多个Java语言版本和JDK发行版,比如OpenJDK和Kona的版本8,11和17。那么它就需要针对所有受支持的Java语言版本和JDK发行版进行测试。

为了缓解上述痛点,Gradle引入了称之为Toolchain的特性。该特性不仅支持了国际流行的OpenJDK发行版,也支持了Kona。具体地,它为Kona分配了常量JvmVendorSpec.TENCENT。

先使用下面的命令列出可以使用的JDK发行版,

$ gradle javaToolchains
...
...
 + Eclipse Temurin JDK 11.0.23+9
     | Location:           /path/to/.sdkman/candidates/java/11.0.23-tem
     | Language Version:   11
     | Vendor:             Eclipse Temurin
     | Architecture:       aarch64
     | Is JDK:             true
     | Detected by:        SDKMAN!
...
 + Tencent JDK 17.0.15+1-LTS
     | Location:           /path/to/.sdkman/candidates/java/17.0.15-kona
     | Language Version:   17
     | Vendor:             Tencent
     | Architecture:       aarch64
     | Is JDK:             true
     | Detected by:        Current JVM
...

在Gradle工程脚本中使用Toolchain API,指定在不同的构建阶段使用不同的JDK发行版。

下面的语句指定了使用Kona 11作为编译器,那么就会使用一个本地的Kona 11版本去编译源代码。

javaCompiler = javaToolchains.compilerFor {
    languageVersion = JavaLanguageVersion.of(11)
    vendor = JvmVendorSpec.TENCENT
}

下面的语句指定了使用Kona 17作为执行器,那么就会使用一个本地的Kona 17版本去执行应用或测试程序。

javaLauncher = javaToolchains.launcherFor {
    languageVersion = JavaLanguageVersion.of(17)
    vendor = JvmVendorSpec.TENCENT
}

关于Gradle Toolchain更详细的用法,请参考官方文档:https://docs.gradle.org/current/userguide/toolchains.html

后记

自发布以来,Kona始终处于良好的维护状态,一直能够保证按计划发布季度更新版本。这些版本既包含了特性增强,也包含了安全漏洞与缺陷补丁。

Kona拥有一支包含有多位OpenJDK Reviewer,Committer和Author的技术团队。该团队秉承着技术服务业务的理念,持续在安全性,稳定性,高性能和可维护性方面积极探索并稳步推进。在OpenJDK最新的14个版本(11至24)的累积贡献量统计中,Kona团队稳居世界前六,中国第一。

欢迎到Kona的各个GitHub仓库中提需求,开Bug,聊发展。

文章来源于腾讯云开发者社区,点击查看原文