腾讯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): YSetting 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,聊发展。
关注腾讯开源公众号
获取更多最新腾讯官方开源信息!
加微信进群即可了解更多“腾讯开源新动态”!
添加微信请备注:腾讯开源