記事
CLion で OpenJDK のコードを正しく読む
CLion で OpenJDK のコードを読もうとするときに発生するエラーの対処法について
CLion で OpenJDK のコードを読もうとすると真っ赤になってしまい,およそ読めたものではありません。 この記事では,OpenJDK のコードを準備し,それのエラーを(概ね)解消して,正しく読めるようにするまでの手順をまとめます。
なお,ここまでひたすら「OpenJDK のコード」と云っていますが,これは OpenJDK(組織)による JDK のコードのことを指しています。 今後も同じ表現を使用しますが,適宜読み替えてください。
NOTE
なお,筆者は以下の環境で作業を行いました。
- OS: Windows 11 Pro 25H2
- Editor: CLion 2026.1.3
- MSYS2: 3.6.5-0eeda3e1.x86_64
<エレベーター>#
ステップ 1. 環境を構築しよう#
ステップ 1.b. MSYS2 をインストールしよう#
OpenJDK のコードを読むためには,適切にセット・アップされた make が必要です。 make を適切にセット・アップするためには MSYS2 の特に UCRT64 環境が必要ですから,適当にインストールしましょう。
MSYS2 のホーム・ページ(https://www.msys2.org/)を見てみると,インストールの方法が書かれています。 Winget(新しめの Windows には標準で入っているパッケージ管理ツール)を使うと簡単にインストールできます。
PS> winget install -e --id MSYS2.MSYS2
ステップ 1.c. UCRT64 をセット・アップしよう#
これの実行が終わると,スタート・アップに「MSYS2 UCRT64」というのが生えてきますから,これを実行してください。
或いは,コマンドから C:\msys64\ucrt64.exe を実行しても構いません。

開いたシェルで,以下のコマンドを実行します。 このコマンドは環境構築に必要な依存関係をまとめてインストールしてくれます。
$ pacman -S --needed autoconf make mingw-w64-x86_64-toolchain tar unzip zip
IMPORTANT
このコマンドは x86_64 環境で実行することを想定しています。
arm 環境で実行する場合は,mingw-w64-x86_64-toolchain の部分を mingw-w64-aarch64-toolchain に置き換えてください。
ステップ 2. (オプション) ビルド・テスト環境を整えよう#
この記事を読んでいる方は,恐らく OpenJDK に貢献したい方だと思います。 貢献をする場合には,単体テストやビルドを行う必要があるでしょうから,この節の内容も実行しておくことをおすすめします。 そうでない方は,やはりこの節の内容を実行しておくと,後々タノシイですから,やっておきましょう。
ステップ 2.b. Java を入れよう#
まず,ビルドをするためには 割と最新めの OpenJDK Java が必要です。 Java をビルドするために Java が必要というのは,なんだか不思議な話ですが,そういうものだと思って一旦飲み込んでください。
ホスト側で以下のコマンドを実行すると,インストール可能な全ての Java バージョンが表示されます:
PS> winget search Oracle.JDK
Name Id Version Source
--------------------------------------------------------------
Java(TM) SE Development Kit 17 Oracle.JDK.17 17.0.12.0 winget
Java(TM) SE Development Kit 18 Oracle.JDK.18 18.0.2.1 winget
Java(TM) SE Development Kit 19 Oracle.JDK.19 19.0.2.0 winget
Java(TM) SE Development Kit 20 Oracle.JDK.20 20.0.2.0 winget
Java(TM) SE Development Kit 21 Oracle.JDK.21 21.0.11.0 winget
Java(TM) SE Development Kit 22 Oracle.JDK.22 22.0.2.0 winget
Java(TM) SE Development Kit 23 Oracle.JDK.23 23.0.2.0 winget
Java(TM) SE Development Kit 24 Oracle.JDK.24 24.0.2.0 winget
Java(TM) SE Development Kit 25 Oracle.JDK.25 25.0.3.0 winget
Java(TM) SE Development Kit 26 Oracle.JDK.26 26.0.1.0 winget
最新 Java のビルドには,リリース済みの最新 Java が必要ですから,ここでは最新の Java 26 をインストールします。 適宜,最新の Java バージョンをインストールしてください。
PS> winget install Oracle.JDK.26
インストールが終わったら,インストールされた Javaのパスを控えておき,以下の規則に従って変換します:
- バック・スラッシュをスラッシュに置換する(
\\->/) - ボリューム・ラベル(
C:\など) は/添え字/に変換する(/c/)
私の環境では C:\Java\sdk\openjdk\26.0\ に在ったので /c/Java/sdk/openjdk/26.0/ として覚えておきます。
bin/ にパスを通しておくと,後々便利です(java が使えるようになります)。
ステップ 2.b. JTReg をセット・アップしよう#
OpenJDK 独自の単体テスト・フレーム・ワーク たる JTReg をインストールしましょう。 これがあると,テストが沢山実行される様が見られてタノシイです。
バイナリの提供はなされていないため,ソース・コードから自分でビルドしましょう。
$ git clone https://github.com/openjdk/jtreg
$ cd jtreg
$ sh make/build.sh
# ↑ にコケた場合は,明示的に指定しましょう。
$ sh make/build-all.sh --with-jdk=/c/path/to/your/jdk
ビルドに成功すると,lib/jtreg.jar が生成されます。後で使用するので,フル・パスを控えておいてください。
さらに,bin/ ディレクトリにパスを通しておくと,後々便利です(jtreg コマンドが使えるようになります)。
ステップ 2.c. VisualStudio を入れよう#
Windows 環境で OpenJDK のコードをコンパイルするためには,VisualStudio (付属したツール・チェーン)が必要です。 Windows でなくても,とにかく以下のツールを入れておきましょう。バージョンは下限です:
| Operating system | Toolchain version |
|---|---|
| Linux | gcc 14.2.0 |
| macOS | Apple Xcode 15.4 & clang 15.0.0 |
| Windows | Microsoft Visual Studio 2022 version 17.13.2 |
Visual Studio は公式ホーム・ページ(https://learn.microsoft.com/ja-jp/visualstudio/ide/whats-new-visual-studio-2022)からダウン・ロードしてください。
ステップ 3. OpenJDK をゴニョろう#
ステップ 3.a. OpenJDK のコードをクローンしよう#
OpenJDK のコードは GitHub のリポジトリ(https://github.com/openjdk/jdk/) にあります。 これを適当な場所にクローンしましょう。
$ git clone https://github.com/openjdk/jdk/
$ cd jdk
ステップ 3.b. OpenJDK をセット・アップしよう#
さて,現環境に合わせてプロジェクトを慣らしてあげます。 以下のコマンドを実行して,セット・アップしましょう(実行には 3~5分ほどかかります)。
$ bash configure --with-jtreg=<jtreg のインストール・パス>/lib/jtreg.jar --boot-jdk=<インストールした JDK のパス>
ステップ 3.c. compile_commands.json を生成しよう#
さて,ここからが本題です。
CLion で巨大なプロジェクトを正しく読み込むためには,CMakeLists.txt を自分で書くか,自動生成した compile_commands.json を使う必要があります。
ぶっちゃけどっちでもよいのですが,人間は怠惰なものですから,自動生成できる後者を使うと嬉しいです。
以下のコマンドを実行すると,compile_commands.json が生成されます。
実行には 5~10分ほどかかりますから,辛抱強く待ちましょう。
$ make compile-commands
実行が完了すると, build/<アーキテクチャの名前など>/compile_commands.json が生成されていると思います。
ステップ 3.d. compile_commands.json をパッチしよう#
CLion の Issues によると,空白を含むパスを適切に取り扱えない,pathmap の取り扱いが不適切,などなど様々なバグがあります。
そのため,JetBrains のブログ記事(本記事末尾に記載)を参考にしつつ,私が書いたパッチがありますから,実行します。
パッチの詳しい話は CLion で OpenJDK の compile_commands.json を読み込めない問題へのパッチ に分けました。
compile_commands.json が生成されたディレクトリに Patch.java をダウンロードし,以下のコマンドを実行します。
$ java Patch.java compile_commands.json
これを実行すると,既存の compile_commands.json が上書きされ,CLion 的にタダシイ物が生成されます。
(元あったものは compile_commands.json.old としてバック・アップされます)
IMPORTANT
もしこのパッチを怠ると,次のステップで CLion で開いた時に,以下のようなエラーが発生して詰みます。

ステップ 4. CLion でプロジェクトを開こう#
ステップ 4.a. CLion で compile_commands.json を開こう#
エクスプローラで build/<アーキテクチャの名前など>/ を開き,compile_commands.json があることを確認します。
これを右クリックし,「プログラムで開く」から CLion を選択しましょう:

ここで,「プロジェクトとして開く」或いは「ファイルとして開く」のようなダイアログが出てくる場合があります。 もし出てきたら前者を選択しましょう。
ステップ 4.b. プロジェクト・ルートを変更しよう#
CLion → ⋮ → Tools → Compilation Database → Change Project Root を選択し,表示されたダイアログで,
OpenJDK のルート・ディレクトリ(build/<アーキテクチャの名前など>/ の2つ上のディレクトリ)を選択します。
C:\Users\<ユーザー名>\Documents\OpenJDK\jdk\build\windows-x86_64-server-release
↓
C:\Users\<ユーザー名>\Documents\OpenJDK\jdk
そうすると,いい感じにプロジェクトの再インデックス化が始まり,しばらくすると完了します。 さすれば,完了です。
NOTE
なお,コンソールに以下のようなエラーが発生しているかもしれませんが,これは無視してしまって良いです。
Cannot determine compiler type by executable file: 'C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.44.35207\bin\Hostx64\x64\ml64.exe'
ステップ 4.c. 適当なファイルを開いてみよう#
例えば,java コマンドのエントリポイントは src/java.base/share/native/launcher/main.c です。
開いてみましょう。

このように,開いてみて(特に #include 周りに)エラーが発生しなければ,成功です。
Java VM が作られるところも見てみましょう。
src/hotspot/share/prims/jni.cpp を開き,JNI_CreateJavavM を探してみます。
警告こそ多いものの,エラーは発生していないため,普通に読めるコードになっていると思います。

JNI_CreateJavaVM_inner の呼び出しを Ctrl + クリック すると,同ファイル内にある定義に飛べることがわかります。
まとめ#
いかがでしたでしょうか。
CLion で OpenJDK のコードを読むためには,compile_commands.json の生成とパッチが必要です。
今後はこの記事をブック・マークするなどして,毎回の clean → compile-commands 時にパッチを適用してください…!
参考文献#
- Anastasia Kazakova, "Tips & Tricks: Develop OpenJDK in CLion with Pleasure", JetBrains Blog, 2020/03/10, https://blog.jetbrains.com/clion/2020/03/openjdk-with-clion/