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

Window下编译OpenJDK17

 本文详细介绍Window下如何编译OpenJDK17,包含源码路径,各工具下载地址,严格按照文章中的步骤来操作,你将获得一个由自己亲手编译出的jdk。

 一、下载OpenJDK17源码

下载地址:GitHub - openjdk/jdk at jdk-17+35

说明:

1、kkgithub为github的国内镜像,能够提高下载速度

 2、下载下来的源码存放路径:无中文、无空格

、阅读一遍doc/building.html

简单阅读一遍源码中的编译文档,重点关注各工具的版本要求。

构建步骤主要为以下4步:

1、获取源码

2、运行配置(bash configure)

3、运行make(make images)

4、验证是否构建成功(./build/*/images/jdk/bin/java -version)

、安装CYGWIN

CYGWIN是一个用于在windows上模拟UNIX或LINUX环境的软件,在其上可使用GNU工具集在Windows上进行嵌入式系统开发。之所以要下载这个软件,是因为后面编译OpenJDK的时候,需要用GNU Make来执行Makefile文件。

下载地址:https://www.cygwin.com/setup-x86_64.exe

说明:

1、安装在非不含中文、不含空格的路径下

2、安装必须的组件:<path to Cygwin setup>/setup-x86_64 -q -P autoconf -P make -P unzip -P zip

3、后续的配置和运行,都需要再cygwin环境下执行,双击桌面图标即可进入

、安装Visual Studio 2019(C++编译器)

下载地址:https://aka.ms/vs/16/release/vs_professional.exe

参考地址:

创建基于网络的安装 - Visual Studio (Windows) | Microsoft Learn

说明:

1、OpenJDK17最高只支持VS2017和VS2019,不支持VS2022

2、VS安装路径不能包含中文、空格,在--with-tools-dir需要指定该位置

3、工作负荷需要勾选“使用C++的桌面开发”

4、语言包需要安装“英语”

五、安装jdk(--with-boot-jdk)

jdk编译过程中需要将Java源码编译成class文件,因此本地需要安装现有的jdk,最好版本号和openjdk保持一致。

下载地址:https://aka.ms/download-jdk/microsoft-jdk-17.0.12-windows-x64.msi

说明:jdk安装路径不能包含中文和空格,在--with-boot-jdk中需要指定该位置

六、配置依赖

在cygwin环境执行配置。

  1. 进入jdk源码解压目录。
  2. 执行清理:make dist-clean(每次编译失败需要改配置时,都需要执行清理命令)
  3. 执行配置:bash configure --enable-debug --with-jvm-variants=server --with-boot-jdk=/cygdrive/c/oracle_jdk-17 --with-tools-dir=/cygdrive/c/msv/2019/Professional/VC/Auxiliary/Build --disable-warnings-as-errors(jdk和vs需要替换为自己的目录,/cygdrive/c/oracle_jdk-17为cygwin模式下的路径写法,代表C:\oracle_jdk-17,这些配置项都必不可少,踩过坑
  4. 执行成功提示如下,如果有错误,根据错误信息,查阅building.html中的解决方案,处理完之后执行清理,再重新执行配置

七、编译

1、先执行make clean清除旧配置

2、再执行make images进行编译,预计耗时1小时,成功提示如下:

八、验证

编译输出的jdk路径为:<jdk源码路径>\build\windows-x86_64-server-fastdebug\jdk,jdk目录即为基于源码编出绿色版jdk,进入bin目录,执行Java -version,能正确输出,即代表编译成功

相关文章:

  • STM32CUBEIDE FreeRTOS操作教程(四):timer软件定时器
  • 代码随想录 -- 二叉树 -- 平衡二叉树
  • 类和对象的定义和调用演示(C++)
  • 项目——负载均衡OJ
  • 【Qt开发】QT6.5.3安装方法(使用国内源)亲测可行!!!
  • Prometheus与Grafana入门:从安装到基础监控的完整指南
  • 海信发布以旧换新举措,补贴力度、补贴链路、服务体验全面升级
  • 通过用例演示如何反向截取QString对象的子串
  • Python 算法交易实验88 QTV200日常推进-关于继续前进的思考
  • 打破AI壁垒-降低AI入门门槛
  • 【扇贝编程】使用Selenium模拟浏览器获取动态内容笔记
  • 【苍穹外卖】Day 6 HttpClient、wx小程序
  • 用Boot写mybatis的增删改查
  • AI prompt(提示词)
  • 【Python报错已解决】 AttributeError: ‘move_to‘ requires a WebElement
  • ES6指北【2】—— 箭头函数
  • 03Go 类型总结
  • 2017年终总结、随想
  • Android优雅地处理按钮重复点击
  • canvas绘制圆角头像
  • java 多线程基础, 我觉得还是有必要看看的
  • JavaScript工作原理(五):深入了解WebSockets,HTTP/2和SSE,以及如何选择
  • js如何打印object对象
  • Material Design
  • nginx 配置多 域名 + 多 https
  • nodejs实现webservice问题总结
  • php的插入排序,通过双层for循环
  • React-redux的原理以及使用
  • Spring核心 Bean的高级装配
  • vue.js框架原理浅析
  • 持续集成与持续部署宝典Part 2:创建持续集成流水线
  • 浮现式设计
  • 理解在java “”i=i++;”所发生的事情
  • 前端_面试
  • 前端js -- this指向总结。
  • 使用 5W1H 写出高可读的 Git Commit Message
  • 首页查询功能的一次实现过程
  • 译有关态射的一切
  • ​LeetCode解法汇总518. 零钱兑换 II
  • ​力扣解法汇总946-验证栈序列
  • ​直流电和交流电有什么区别为什么这个时候又要变成直流电呢?交流转换到直流(整流器)直流变交流(逆变器)​
  • #1015 : KMP算法
  • #define用法
  • #Linux(make工具和makefile文件以及makefile语法)
  • #每日一题合集#牛客JZ23-JZ33
  • #我与Java虚拟机的故事#连载15:完整阅读的第一本技术书籍
  • $分析了六十多年间100万字的政府工作报告,我看到了这样的变迁
  • (2022 CVPR) Unbiased Teacher v2
  • (AngularJS)Angular 控制器之间通信初探
  • (day6) 319. 灯泡开关
  • (附源码)springboot掌上博客系统 毕业设计063131
  • (算法)Game
  • (幽默漫画)有个程序员老公,是怎样的体验?
  • .h头文件 .lib动态链接库文件 .dll 动态链接库
  • .net mvc 获取url中controller和action