前言
最近在学习周志明老师的《深入理解java虚拟机》,看过第一章以后记录一下自己在mac上编译jdk12的过程。
资源准备
环境是系统是macos10.15.3,安装xcode11.3.1,下载 Command Line Tools ,使用工具homebrew
首先是资源的准备:
- openjdk12的下载,
- 一个启动的jdk(Bootstrap
JDK)【因为要编译的jdk有很多代码是使用java编写,要编译这些代码就需要另一个已经编译过的jdk,这个jdk要比当前版本少一】,我使用的是社区版的openjdk11(AdoptOpenJDK)。 - 使用homebrew安装依赖
brew install ccache //加速编译
brew install freetype //字体引擎,编译过程中会被依赖到
编译
编译前
编译前要好好阅读下载的openjdk里common文件夹中的doc文件夹下的build.html文件,有关于你编译的jdk需要环境的详细解读,如上文的xcode的版本,系统的要求
编译
我们用终端cd到openjdk文件夹的common下
通过bash configure --help
查看configure参数信息
然后通过 命令 bash configure
验证当前环境是否能成功编译,命令如下:
参数说明
--with-debug-level=slowdebug 启用slowdebug级别调试
--with-jvm-variants=server 编译server类型JVM
--enable-ccache 启用ccache,加快编译
--with-freetype=/usr/local/Cellar/freetype/2.10.1(你的版本)
--disable-warnings-as-errors 忽略警告
--with-boot-jdk=/Users/haozhipeng/Downloads/openjdk11/Contents/Home 启动jdk的设置
debug-level代表了优化级别,可选值为release,fastbug,slowdebug。优化级别越高,性能自然就越好,但是输出代码与源码的差距就越大,难于调试
命令
bash configure --with-debug-level=slowdebug --with-jvm-variants=server --enable-ccache --with-freetype=/usr/local/Cellar/freetype/2.10.1 --with-boot-jdk=/Users/haozhipeng/Downloads/openjdk11/Contents/Home --disable-warnings-as-errors
运行命令后如果没问题,会出现如下界面:
A new configuration has been successfully created in
/Users/haozhipeng/Downloads/openjdk/build/macosx-x86_64-server-slowdebug
using configure arguments '--with-debug-level=slowdebug --enable-ccache --with-jvm-variants=server --with-boot-jdk=/Users/haozhipeng/Downloads/openjdk-11_osx-x64_bin/jdk-11.jdk/Contents/Home --disable-warnings-as-errors'.
Configuration summary:
* Debug level: slowdebug
* HS debug level: debug
* JVM variants: server
* JVM features: server: 'aot cds cmsgc compiler1 compiler2 dtrace epsilongc g1gc graal jfr jni-check jvmci jvmti management nmt parallelgc serialgc services shenandoahgc vm-structs'
* OpenJDK target: OS: macosx, CPU architecture: x86, address length: 64
* Version string: 12-internal+0-adhoc.haozhipeng.openjdk (12-internal)
Tools summary:
* Boot JDK: openjdk version "11" 2018-09-25 OpenJDK Runtime Environment 18.9 (build 11+28) OpenJDK 64-Bit Server VM 18.9 (build 11+28, mixed mode) (at /Users/haozhipeng/Downloads/openjdk-11_osx-x64_bin/jdk-11.jdk/Contents/Home)
* Toolchain: clang (clang/LLVM from Xcode 11.3.1)
* C Compiler: Version 11.0.0 (at /usr/bin/clang)
* C++ Compiler: Version 11.0.0 (at /usr/bin/clang++)
Build performance summary:
* Cores to use: 8
* Memory limit: 16384 MB
* ccache status: Active (3.7.7)
开始编译
使用make images
开始编译
编译后结尾是这样的:
注: 有关详细信息, 请使用 -Xlint:unchecked 重新编译。
Compiling 8 files for BUILD_DEMO_TableExample
Updating support/demos/image/jfc/TableExample/src.zip
Compiling 1 files for BUILD_DEMO_TransparentRuler
Updating support/demos/image/jfc/TransparentRuler/src.zip
注: 某些输入文件使用或覆盖了已过时的 API。
注: 有关详细信息, 请使用 -Xlint:deprecation 重新编译。
注: /Users/haozhipeng/Downloads/openjdk/src/demo/share/jfc/TableExample/TableExample4.java使用了未经检查或不安全的操作。
注: 有关详细信息, 请使用 -Xlint:unchecked 重新编译。
Creating support/demos/image/jfc/CodePointIM/CodePointIM.jar
Creating support/demos/image/jfc/FileChooserDemo/FileChooserDemo.jar
Creating support/demos/image/jfc/SwingSet2/SwingSet2.jar
Creating support/demos/image/jfc/Font2DTest/Font2DTest.jar
Creating support/demos/image/jfc/J2Ddemo/J2Ddemo.jar
Creating support/demos/image/jfc/Metalworks/Metalworks.jar
Creating support/demos/image/jfc/Notepad/Notepad.jar
Creating support/demos/image/jfc/Stylepad/Stylepad.jar
Creating support/demos/image/jfc/SampleTree/SampleTree.jar
Creating support/demos/image/jfc/TableExample/TableExample.jar
Creating support/demos/image/jfc/TransparentRuler/TransparentRuler.jar
Creating jdk image
Creating CDS archive for jdk image
Stopping sjavac server
Finished building target 'images' in configuration 'macosx-x86_64-server-slowdebug'
编译成功后会出现如下目录
在这里插入图片描述
进入build/配置名称/jdk目录下可以看到完整openjdk的编译结果,但不知道为什么把它当成jdk直接使用不行,必须使用build/配置名称/images目录下的jdk才能当成jdk直接使用。
验证
将编译成功的jdk
cd进入build/配置名称/jdk/bin目录下,输入java -version即可看到编译jdk的版本信息。
openjdk version "12-internal" 2019-03-19
OpenJDK Runtime Environment (slowdebug build 12-internal+0-adhoc.haozhipeng.openjdk)
OpenJDK 64-Bit Server VM (slowdebug build 12-internal+0-adhoc.haozhipeng.openjdk, mixed mode)
错误处理
在编译中踩了一些坑,分享给大家希望大家看到类似情况可以有相应的解决方案。
1.沙雕的忘记准备启动jdk
导致输入环境验证命令后出现如下错误
configure: Could not find a valid Boot JDK. You might be able to fix this by running 'brew cask install java'.
configure: This might be fixed by explicitly setting --with-boot-jdk
configure: error: Cannot continue
/Users/haozhipeng/Downloads/openjdk/build/.configure-support/generated-configure.sh: line 82: 5: Bad file descriptor
所以一定要准备启动jdk!!!
最后,上述仅代表我自己的编译过程,其中如果有用词浅薄的地方希望大家多多指正,转载请附上说明,谢谢!
网友评论