当前位置: 首页 > news >正文

BiSheng JDK-build扩展开发:如何添加新的JDK版本支持

BiSheng JDK-build扩展开发:如何添加新的JDK版本支持

【免费下载链接】bishengjdk-buildBiSheng JDK build and test scripts - common across all releases/versions项目地址: https://gitcode.com/openeuler/bishengjdk-build

前往项目官网免费下载:https://ar.openeuler.org/ar/

BiSheng JDK-build是openEuler社区提供的JDK构建与测试脚本集合,支持跨版本、跨架构的JDK编译流程。本文将详细介绍如何为该项目添加新的JDK版本支持,帮助开发者快速扩展构建能力。

准备工作:了解项目结构

在开始扩展前,先熟悉项目的核心目录结构:

  • bootjdk/:存放不同JDK版本的引导JDK压缩包,如jdk21/OpenJDK21U-jdk_x64_linux_hotspot_21.0.1_12.tar.gz
  • sbin/common/:包含架构和版本相关的常量定义,如constants_jdk25_x86_64.sh
  • sbin/prepare.sh:环境准备脚本,负责依赖安装和引导JDK配置
  • sbin/buildjdk.sh:核心构建脚本,处理编译参数和打包流程

步骤1:添加引导JDK

新JDK版本需要对应的引导JDK(Boot JDK),需将其放置在bootjdk目录下:

  1. 创建版本目录:mkdir -p bootjdk/jdk{VERSION}(例如jdk26
  2. 下载对应架构的引导JDK压缩包(如OpenJDK26U-jdk_x64_linux_hotspot_26.0.0_10.tar.gz
  3. 放置到bootjdk/jdk{VERSION}/目录下

引导JDK版本通常需要比目标版本低1-2个主要版本,具体参考JDK官方构建文档

步骤2:创建版本常量配置

sbin/common/目录下创建新的常量配置文件,命名格式为constants_jdk{VERSION}_{ARCH}.sh

# 示例:constants_jdk26_x86_64.sh declare -A DEFAULT_CONFIGURE_ARGS=( [with-extra-cflags]="-fno-aggressive-loop-optimizations \ -fno-gnu-unique \ -Wno-unused-parameter" \ [with-extra-ldflags]="-Wl,-z,now" \ [enable-unlimited-crypto]="" \ [with-zlib]="bundled" ) export DEFAULT_MAKE_ARGS="LOG=debug" export RELEASE_MAKE_TARGETS="product-images legacy-jre-image" export TARGET_FILE_TEMPLATE="bisheng-jdk-26.0.REPLACE-b$BUILD_JDK_BUILD_NUMBER-linux-x64" # 添加测试排除项 export JTREG_TEST_EXCLUDE="compiler/c2/Test8004741.java \ runtime/Thread/AsyncExceptionOnMonitorEnter.java"

该文件需定义:

  • 编译参数(DEFAULT_CONFIGURE_ARGS
  • 构建目标(RELEASE_MAKE_TARGETS
  • 输出文件名模板(TARGET_FILE_TEMPLATE
  • 测试排除用例(JTREG_TEST_EXCLUDE

步骤3:修改环境准备脚本

编辑sbin/prepare.sh,添加新JDK版本的引导JDK配置:

# 在InstallJDKBuildTools函数中添加 elif [[ "${BUILD_CONFIG[BUILD_VARIANT]}" = "${BISHENGJDK_26_BUILD_VARIANT}" ]]; then cd "${ROOT_DIR}/resources" if [[ "${BUILD_CONFIG[ARCH]}" = "aarch64" ]]; then cp "${ROOT_DIR}/bootjdk/jdk26/OpenJDK26U-jdk_aarch64_linux_hotspot_26.0.0_10.tar.gz" . tar -xf OpenJDK26U-jdk_aarch64_linux_hotspot_26.0.0_10.tar.gz else cp "${ROOT_DIR}/bootjdk/jdk26/OpenJDK26U-jdk_x64_linux_hotspot_26.0.0_10.tar.gz" . tar -xf OpenJDK26U-jdk_x64_linux_hotspot_26.0.0_10.tar.gz fi BUILD_CONFIG[BOOT_JDK]="${BUILD_JDK_RESOURCE_DIR}/jdk-26.0.0+10"

同时在jtreg版本选择部分添加对应版本的测试工具支持:

elif [[ "${BUILD_CONFIG[MAJOR_NUMBER]}" -eq 26 ]] ; then jtregPath=$(echo "${BISHENGJDK_DEFAULT_TOOLS_DIR}"/jtreg*7.5.2*.tar.gz)

步骤4:更新构建脚本

修改sbin/buildjdk.sh,在版本判断逻辑中加入新JDK支持:

# 在ConfigureArgs函数中添加 elif [[ "${BUILD_CONFIG[BUILD_VARIANT]}" = "${BISHENGJDK_26_BUILD_VARIANT}" ]]; then AddConfigureArg "--with-version-build" "${BUILD_CONFIG[BUILD_NUMBER]}" # 添加JDK26特有的编译参数 AddConfigureArg "--with-source-date" "version"

步骤5:验证与测试

完成配置后,执行以下命令验证新JDK版本的构建流程:

# 克隆仓库 git clone https://gitcode.com/openeuler/bishengjdk-build # 执行构建(以JDK26 x86_64为例) cd bishengjdk-build export BUILD_VARIANT=jdk26 export ARCH=x86_64 ./sbin/prepare.sh ./sbin/buildjdk.sh

构建成功后,检查output/目录是否生成预期的JDK压缩包。建议运行测试脚本验证功能完整性:

./sbin/testjdk.sh

常见问题解决

  1. 引导JDK版本不匹配
    错误提示:configure: error: Could not find a valid Boot JDK
    解决:确保引导JDK版本符合JDK构建要求,通常需要前一个LTS版本。

  2. 编译参数错误
    解决:参考同系列版本的constants配置文件,确保新添加的编译参数与目标JDK版本兼容。

  3. 测试用例失败
    解决:通过JTREG_TEST_EXCLUDE排除不兼容的测试用例,参考sbin/common/constants_jdk25_x86_64.sh中的排除列表。

总结

通过添加引导JDK、创建常量配置、更新准备脚本和构建脚本四个关键步骤,即可为BiSheng JDK-build项目添加新的JDK版本支持。社区欢迎开发者贡献更多版本支持,共同完善openEuler生态的JDK构建能力!

【免费下载链接】bishengjdk-buildBiSheng JDK build and test scripts - common across all releases/versions项目地址: https://gitcode.com/openeuler/bishengjdk-build

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

http://www.jsqmd.com/news/1200736/

相关文章:

  • 乐清嘉博会计|深耕乐清20年全域直营 本土正规资质注册代账财税机构 - GrowthUME
  • 终极实战:gibMacOS跨平台下载与制作macOS离线安装包完整指南
  • 从GDP到菲利普斯曲线:一份面向实践者的宏观经济学核心概念精解
  • 如何在Apple Silicon Mac上使用Whisky运行Windows应用:实用指南
  • 3个痛点,一个工具搞定:Explorer++如何重塑Windows文件管理体验
  • Angry IP Scanner完整指南:5分钟掌握高效网络扫描技术
  • 终极方舟启动器TEKLauncher:告别手动配置,5分钟搭建完美游戏环境
  • 电子设计周报:工程师必读的技术深度解析
  • 如何深度定制Windows系统字体:No!! MeiryoUI终极指南
  • 一篇看懂AI新名词:从MCP到Agent、Skil
  • 如何3步完成方舟MOD管理革命:终极TEKLauncher完全指南
  • 别再用Excel了!WPS AI表格已支持自然语言建模:说“对比Q3华东区销售额TOP5客户毛利变化”,结果秒出图表+归因分析
  • openeuler/btfhub-archive揭秘:从目录结构到文件命名的终极解析
  • 现在不学Claude批量自动化,下周就被淘汰!——2024 Q3企业AI提效刚需技能TOP1(附可立即运行的Docker镜像)
  • FPGA实现数控振荡器(NCO)的核心技术与优化实践
  • C#安装包进阶指南:从EXE到MSI的打包策略与实战
  • 博士论文降 AI 用哪个软件稳过知网?亲测有效
  • ROS与YOLOv5集成实战:实时目标检测优化方案
  • 终极指南:在macOS上轻松制作Windows启动盘的完整解决方案
  • 400G ER8光模块部署前必须做的四道关键检查
  • WinMemoryCleaner:如何用免费工具解决Windows内存卡顿问题
  • Mac Intel平台CPU部署LLM实战:优化技巧与量化策略
  • rgthree-comfy图像处理架构:基于潜在空间优化的AI图像质量评估与精准裁剪方案
  • Windows 7 SP2终极指南:如何在2026年让经典系统重获新生?
  • Vegas与Vega-Lite集成原理:JSON规范到Scala DSL的转换
  • Apple Silicon Mac终极兼容方案:Whisky让Windows应用在macOS上原生运行
  • 业绩预增743倍股价却回调,江波龙A+H上市背后藏多少隐忧?
  • Anno 1800 Mod Loader终极指南:5分钟打造你的专属游戏世界
  • 如何快速解决Xcode设备识别问题:iOSDeviceSupport完整使用指南
  • GIS空间分析之公路选线:从成本栅格到最优路径的实战解析