玩转腾讯Kona JDK的N种姿势

玩转腾讯Kona JDK的N种姿势
腾讯Kona JDK腾讯Kona JDK后文简称为Kona是腾讯的OpenJDK发行版。它基于腾讯内外部的海量业务针对大数据云计算机器学习和安全等多个领域进行了广泛扩展与深度优化。该发行版支持OpenJDK的全部长期支持LTS版本包括81117和21。它还支持主流的操作系统平台包括Linux x64Linux aarch64Windows x64macOS x64和macOS aarch64。获悉更多信息请访问Kona的GitHub主页https://tencent.github.io/konajdk如何获取从GitHub下载Kona的开源仓库主要是在GitHub Tencent帐户下。它的4个LTS版本分别对应4个仓库地址分别是https://github.com/Tencent/TencentKona-8https://github.com/Tencent/TencentKona-11https://github.com/Tencent/TencentKona-17https://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-8https://cnb.cool/tencent/TencentKona/TencentKona-11https://cnb.cool/tencent/TencentKona/TencentKona-17https://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 ServerTS和Alpine Linux以及CPU架构x86_64和aarch64。例如下面的命令会拉取基于TS且CPU架构为x86_64的Kona 8镜像。代码语言javascriptAI代码解释$ docker pull konajdk/konajdk:8-tlinux关于Kona Docker镜像的详细信息请查看DockerHubhttps://hub.docker.com/r/konajdk/konajdk/tags通过SDKMAN下载SDKMAN是一个流行的SDK安装与管理工具。它支持各种SDK包括多种OpenJDK发行版也支持Kona。由于Kona有4个LTS版本而每个LTS版本在每个季度又会发布更新版本这使得发布版本众多。而开发中经常需要安装多个不同的版本且会在不同的版本之间切换使用。使用SDKMAN来安装和管理Kona就不需要关注过多的细节在不同的版本之间切换使用也十分简单。先通过下面的命令列出已发布的Kona版本代码语言javascriptAI代码解释$ 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代码语言javascriptAI代码解释$ 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并且它被设置为当前默认版本。代码语言javascriptAI代码解释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的最新版本代码语言javascriptAI代码解释steps: - name: Setup Kona JDK uses: Tencent/setup-tencent-konav4 with: distribution: kona java-version: 8●示例2使用Kona全部LTS版本的最新版本代码语言javascriptAI代码解释strategy: matrix: java-version: [8, 11, 17, 21] steps: - name: Setup Kona JDK uses: Tencent/setup-tencent-konav4 with: distribution: kona java-version: ${{ matrix.java-version }}关于更详细的使用方法请参考文档https://github.com/Tencent/setup-tencent-kona/blob/main/docs/advanced-usage.md在Gradle Toolchain中使用默认情况下若使用某个JDK去运行GradleGradle就会用这个JDK去执行Java工程中的各类任务比如编译和测试。但在遇到如下场景时这种工作方式就对开发者不友好了。● 同一个环境中存在多个Gradle工程它们依赖于不同的Java语言版本甚至是不同的JDK发行版。在对这些工程执行Gradle任务时需要经常切换当前环境中的JDK比如修改环境变量JAVA_HOME的值。● 即便只有一个Gradle工程若它声明能够同时支持多个Java语言版本和JDK发行版比如OpenJDK和Kona的版本811和17。那么它就需要针对所有受支持的Java语言版本和JDK发行版进行测试。为了缓解上述痛点Gradle引入了称之为Toolchain的特性。该特性不仅支持了国际流行的OpenJDK发行版也支持了Kona。具体地它为Kona分配了常量JvmVendorSpec.TENCENT。先使用下面的命令列出可以使用的JDK发行版代码语言javascriptAI代码解释$ gradle javaToolchains ... ... Eclipse Temurin JDK 11.0.239 | 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.151-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版本去编译源代码。代码语言javascriptAI代码解释javaCompiler javaToolchains.compilerFor { languageVersion JavaLanguageVersion.of(11) vendor JvmVendorSpec.TENCENT }下面的语句指定了使用Kona 17作为执行器那么就会使用一个本地的Kona 17版本去执行应用或测试程序。代码语言javascriptAI代码解释javaLauncher javaToolchains.launcherFor { languageVersion JavaLanguageVersion.of(17) vendor JvmVendorSpec.TENCENT }关于Gradle Toolchain更详细的用法请参考官方文档https://docs.gradle.org/current/userguide/toolchains.html后记自发布以来Kona始终处于良好的维护状态一直能够保证按计划发布季度更新版本。这些版本既包含了特性增强也包含了安全漏洞与缺陷补丁。Kona拥有一支包含有多位OpenJDK ReviewerCommitter和Author的技术团队。该团队秉承着技术服务业务的理念持续在安全性稳定性高性能和可维护性方面积极探索并稳步推进。在OpenJDK最新的14个版本11至24的累积贡献量统计中Kona团队稳居世界前六中国第一。欢迎到Kona的各个GitHub仓库中提需求开Bug聊发展。