1.环境准备
参考: https://blog.lichenghao.cn/article/1doBxfNLsWgYvRRxOoADL
1.1 源码准备
openjdk 源码地址:https://github.com/openjdk/jdk8u
官方 wiki:https://wiki.openjdk.org/display/jdk8u
下载源码
git clone git@github.com:openjdk/jdk8u.git
1.2 bootjdk
本地没有安装jre的,自行解决
1.3 安装 Xcode
macos版本 Sonoma14.5,尽量保持官方版本
已经安装新版本的Xcode和CommandLineTools,不支持远古的openjdk8,因此需要安装比较老的版本支持本次编译,google帖子说只需要版本小于12(包含12)就可以。
1)到官网下载 Sign In - Apple Xcode12.5.1,安装包 Xcode_12.5.1.xip 很大,感谢公司网速
2)解压出Xcode后点击,大大的提示框,安装在此Mac上的Xcode版本与macOS Sonoma不兼容,自己去下最新版本的吧。在求助google后,https://juejin.cn/post/7163936930009186312 帖子给出了解决方案 ,自己基于帖子的做法,将刚刚解压出来的Xcode重命名为 Xcode12.5.app后,然后执行
mv ./Xcode12.5.app /Application/
,然后进入/Applications/Xcode12.5.app/Contents/MacOS点击Xcode是可以正常执行的。
3)多版本之后就可以依赖 xcode-select 这个神器进行切换Xcode版本,参考 https://juejin.cn/post/6844903844921475079 。
sudo xcode-select -s /Applications/Xcode12.5.app/Contents/Developer
切换后验证了下clang的版本,符合预期
clang -v
Apple clang version 12.0.5 (clang-1205.0.22.11)
Target: x86_64-apple-darwin23.5.0
Thread model: posix
InstalledDir: /Applications/Xcode12.5.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin
蛋疼的apple,自己遇到的最大卡点,这块重点介绍下
1.4 安装 autoconf 、freetype 工具
// 软件源码包的自动配置工具
brew install autoconf
// 字体引擎,编译中要依赖的 freetype
brew install freetype
2.编译过程
2.1 执行配置命令 config
给 configure 执行权限,然后执行如下命令进行自动配置
./configure --with-target-bits=64 --with-jvm-variants=server --with-debug-level=slowdebug 2>&1 | tee configure_mac_x64.log
参数说明:
--with-target-bits=64 设置 32 为 / 64 编译
--with-jvm-variants 设置要构建的 JVM 的变体,目前可以选择 server、client、minimal、core、zero、zeroshark、custom
--with-debug-level 启用 slowdebug 级别调试
2>&1 | tee xxx.log 2>&1 错误重定向到标准输出;并将执行打印的信息全部保存到 xxx.log 文件中
更多参数见:源码包中 doc/building.md 文件
2.2 编译
make all
坐等输出结果
----- Build times -------
Start 2024-06-21 16:13:11
End 2024-06-21 16:22:56
00:00:18 corba
00:00:16 demos
00:01:36 docs
00:02:22 hotspot
00:01:32 images
00:00:14 jaxp
00:00:23 jaxws
00:02:29 jdk
00:00:23 langtools
00:00:11 nashorn
00:09:45 TOTAL
-------------------------
2.3 验证编译出来的jdk
进入 /xxx/jdk8u/build/macosx-x86_64-normal-server-slowdebug/jdk/bin
ls
appletviewer jarsigner.diz jconsole jjs.diz jstatd rmic.diz unpack200
appletviewer.diz java jconsole.diz jmap jstatd.diz rmid unpack200.diz
clhsdb java.diz jdb jmap.diz keytool rmid.diz wsgen
clhsdb.diz javac jdb.diz jps keytool.diz rmiregistry wsgen.diz
extcheck javac.diz jdeps jps.diz native2ascii rmiregistry.diz wsimport
extcheck.diz javadoc jdeps.diz jrunscript native2ascii.diz schemagen wsimport.diz
hsdb javadoc.diz jfr jrunscript.diz orbd schemagen.diz xjc
hsdb.diz javah jfr.diz jsadebugd orbd.diz serialver xjc.diz
idlj javah.diz jhat jsadebugd.diz pack200 serialver.diz
idlj.diz javap jhat.diz jstack pack200.diz servertool
jar javap.diz jinfo jstack.diz policytool servertool.diz
jar.diz jcmd jinfo.diz jstat policytool.diz tnameserv
jarsigner jcmd.diz jjs jstat.diz rmic tnameserv.diz
看下java版本
./java -version
openjdk version "1.8.0_402-internal-debug"
OpenJDK Runtime Environment (build 1.8.0_402-internal-debug-xxx_2024_06_21_16_12-b00)
OpenJDK 64-Bit Server VM (build 25.402-b00-debug, mixed mode)