深入理解java虚拟机: Windows下如何编译、调试JDK源码?
官方链接: build openjdk
编译步骤
step 1: 下载JDK源码,项目路径中不能有空格 1
git clone https://github.com/openjdk/jdk.git jdk-latest
step2:准备编译环境
在windows环境下编译JDK需要准备3个工具,C/C++的编译器、最新的JDK和Cygwin.
备注:
- Hotspot
jvm和一些类的native Method需要C/C++编译器编译;- JDK 标准库需要最新发布的
JDK来编译,官方称其为,book jdk,boot jdk主版本号要大于等于要构建版本的主版本号减1,也就是至少为上个jdk发行版;- Cygwin主要是为windows提供相应的构建工具链,如提供
bash、configure、make、zip等
工具下载链接
- C/C++ 编译器
- visual studio 2019
- 勾选
Desktop development with C/C++工作负载,修改安装路径(可选)
- 勾选
- 参考 visual studio 2019 安装指引
- visual studio 2019
- cygwin 构建环境
- cygwin latest
- 搜索
automake、make、zip、unzip包,勾选安装
- 搜索
- cygwin latest
- jdk 可选以下任一发行版,注意要下载
jdk压缩包,然后解压到任意期望的目录. (路径中不要有空格)
step3: 配置构建环境 2
-
双击
Cygwin64 Terminal,打开cygwin命令行 -
切换到
jdk-latest目录注意:windows目录与cygwin命令行下目录的对应关系
假如jdk源码保存在
D:\Programming\learnspace\cpp\jdk-latest文件夹下,那么在cygwin命令行中执行cd /cygdrive/d/Programming/learnspace/cpp/jdk-latest命令,切换到源码目录 -
配置JDK环境变量
# 将下面命令<winpath to jdk>替换为解压后的jdk目录,将 :\ 替换为 / # 如 export JAVA_HOME=/cygdrive/d/usr/Apps/jdks/temurin-19.0.1 export JAVA_HOME=/cygdriver/<winpath to jdk> export PATH=$JAVA_HOME/bin:$PATH最后输入
java -version,验证是否成功 -
配置make构建系统
# 携带调试信息 bash configure --with-toolchain-version=2019 --disable-warnings-as-errors --with-debug-level=slow --with-native-debug-symbols=zipped
配置成功提示信息如下如所示
-
处理构建系统报错信息
- 路径中有
空格3
解决方案: 以管理员身份打开cmd命令行,执行
fsutil file setshortname <含有空格的路径> <短名称>命令, 如: fsutil "d:\Program Files" dprogs如果修改失败(拒绝访问错误),则需要进入安全模式下命令行,执行上述命令
- 找不到
Microsoft Visual Studio4
解决方案: 可以在Microsoft visual studio默认路径
C:\Program Files (x86)\Microsoft Visual Studio下建立符号链接 如将你的visual studio安装D:\Program Files (x86)\Microsoft Visual Studio目录下, 使用如下命令建立符号链接mklink /D /J "C:\Program Files (x86)\Microsoft Visual Studio\2019" "D:\Program Files (x86)\Microsoft Visual Studio\2019" - 路径中有
step4. make
# 构建jdk镜像
make images
# 构建vscode工程
make vscode-project
最后用vscode打开源码构建目录<winpath to jdk-latest>\build目录下生成vscode工作区文件(如下图,jdk.code-workspace就是vscode工程文件),就可以使用vscode查看和调试源码了;
需要手动修改.vscode\Launch.json和.vscode\Tasks.json启动配置才能启动调试
step5. 其他问题
我使用以上步骤成功在windows下编译了最新的jdk,可以使用windows下相关工具调试学习jdk源码了(调试jvm等); 由于windows下编译jdk有太多坑,通过上述方法无法编译的朋友,可以评论,根据我的经验给出解决建议。 Linux下编译JDK还是最简单的,但有些工具用着总感觉不顺手唉。