osx下编译openjdk10

环境准备

软件 版本 备注
操作系统macOS 10.13.4
Xcode 9.2 基础环境
homebrew 1.6.3 用于安装相关lib

下载源码

  1. openjdk代码使用Mercurial(hg)版本管理工具进行管理.用如下命令进行该工具的安装

    1
    #brew install mercurial
  2. 只需通过如下命令即可进行下载

    1
    hg clone http://hg.openjdk.java.net/jdk10/jdk10/

    如果由于未知原因,openjdk的服务器访问速度很慢,可以考虑方式给hg加上合适的代理线路访问

    如下,修改~/.hgrc增加http代理

    1
    2
    [http_proxy]
    host=127.0.0.1:8580
  3. 下载完代码以后,内容如下所示

    目录结构

  4. 更多的源代码使用get_source.sh进行下载

    1
    bash ./get_source.sh

    接着会下载剩余的openjdk源码

  5. 下载完后得到目录如下所示

    完整的代码

编译项目

  1. 查看common/doc/build.html 了解相关参数

    我的生成命令为

    1
    2
    3
    4
    5
    6
    bash ./configure \
    --with-debug-level=slowdebug
    --with-target-bits=64 \
    --with-jobs=8 \
    --disable-warnings-as-errors \
    --with-jvm-variants=server

    中间可能会出现缺少xxx库的情况

    这个时候使用

    1
    brew install xxx

    安装即可

  2. 运行configure成功后会有如下图显示

    运行configure成功后会有如下图显示

  3. 接着就是编译项目了

    1
    make

    接下来就等着CPU满载编译吧,当看到如下图后,编译就完成了

    辨已完成

  4. 编译的目标文件生成在build/xxx 目录下xxx因编译选项的不同而异

测试

build/macosx-x86_64-normal-server-slowdebug/jdk

  1. 查看java版本

    1
    java -version

    如图所示

    查看java版本

  2. 编译运行Hello World项目

    编写Main.java文件,如下:

    1
    2
    3
    4
    5
    public class Main{
    public static void main(String[] args){
    System.out.println("Hello World");
    }
    }

    编译

    1
    ./bin/javac Main.java

    运行

    1
    ./bin/java Main

    如图所示

    helloworld

调试

在visual studio code中调试

​ visual studio code是一个功能适度的文本编辑器,用来浏览和debug代码非常合适,如下为将openjdk项目放在vscode中调试的教程

  1. 用vscode打开openjdk10源码文件夹

    vscode打开项目

  2. 安装c/c++插件

    vscode安装c/c++插件

  3. 安装完插件后,会重新加载项目,加载后按ctrl + F5启动调试,初次调试选择C++环境,如下:

    c++环境

  4. 在弹出的launch.json中,配置相关运行参数,我的配置如下

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    {
    // 使用 IntelliSense 了解相关属性。
    // 悬停以查看现有属性的描述。
    // 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
    {
    "name": "编译java文件",
    "type": "cppdbg",
    "request": "launch",
    "program": "build/macosx-x86_64-normal-server-slowdebug/jdk/bin/javac",
    "args": ["Main.java"],
    "stopAtEntry": false,
    "cwd": "${workspaceFolder}",
    "environment": [],
    "externalConsole": true,
    "MIMode": "lldb"
    },
    {
    "name": "运行java程序",
    "type": "cppdbg",
    "request": "launch",
    "program": "build/macosx-x86_64-normal-server-slowdebug/jdk/bin/java",
    "args": ["Main"],
    "stopAtEntry": false,
    "cwd": "${workspaceFolder}",
    "environment": [],
    "externalConsole": true,
    "MIMode": "lldb"
    }
    ]
    }

在CLion中调试

  1. 用clion 导入项目即可自动生成cmake项目

  2. 为了加快项目index,可仅勾选hotspot/src/cpu/x86即可

    仅勾选x86

    在hotspot/src/jdk.hotspot.agent仅勾选macosx

    操作系统macosx

  3. 添加运行调试项

    编译HelloWorld

    运行HelloWorld

    上面两个配置中,将Before Luanch的Build去掉,因为我们已经编译过一遍完整的项目,不需要启动前再次编译