玩转腾讯Kona JDK的N种姿势

腾讯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,聊发展。


关注腾讯开源公众号

获取更多最新腾讯官方开源信息!

加微信进群即可了解更多“腾讯开源新动态”

图片

添加微信请备注:腾讯开源

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值