Eclipse 設定変更が反映されないキャッシュ問題:OSGi/Equinox の設計と段階的な対処法
概要
JAVA_HOME や JDK のパスを変更したはずなのに、Eclipse を再起動しても設定が反映されない。Workspace を丸ごと削除すると直った——こうした経験をしたことがある Eclipse ユーザーは多い。
この問題は BMIDE 固有ではなく、Eclipse が採用する OSGi フレームワーク実装(Equinox)のキャッシュ設計に起因する共通の動作特性である。本記事では「なぜ反映されないのか」を先に説明したうえで、影響範囲の小さい順に試せる段階的な対処法を示す。
根本原因:Equinox キャッシュの仕組み
OSGi/Equinox がキャッシュを使う理由
Eclipse は OSGi フレームワーク実装である Equinox をベースとしている。Equinox は起動速度を優先する設計をとっており、バンドル依存解決・拡張レジストリなどの情報を起動時にキャッシュファイルへ書き出す。
公式ドキュメント(Eclipse Runtime Options)の -clean オプションの説明には次の記述がある:
“any cached data used by the OSGi framework and eclipse runtime will be wiped clean. This will clean the caches used to store bundle dependency resolution and eclipse extension registry data.”
このキャッシュは Workspace の .metadata/ 以下に格納される。一度キャッシュが構築されると、OS レベルで環境変数を変更して再起動しても、起動時にキャッシュが優先されるため変更が反映されない。
eclipse.ini の -vm が JAVA_HOME に優先する
eclipse.ini に -vm オプションが設定されている場合、JAVA_HOME 環境変数は参照されない。Eclipse の起動ランチャーは -vm を明示的に指定した場合、PATH 探索も環境変数による JVM 検索も行わない設計になっている。
-vm
C:/Program Files/Java/jdk-17/bin/javaw.exe
BMIDE の場合も同様の仕組みであるが、bmide.ini の詳細な公式ドキュメントは今回の調査では確認できなかった。代わりに、BMIDE は bmide.bat 内で JRE_HOME・JAVA_HOME・JDK_HOME を明示的に設定する方式をとっている(詳細は BMIDE Windows ビルド環境構築 を参照)。
段階的な対処法
影響範囲が小さい順に並べている。Step 1 から順に試し、解消したところで止める。
設定変更の前提手順
- Eclipse / BMIDE を完全終了する
- OS レベルで環境変数を変更する
eclipse.ini/bmide.iniの-vm設定を確認・修正する(-vmが設定されていれば環境変数より優先される)- 新しいシェルセッションから Eclipse / BMIDE を起動する
Step 1: -clean オプションで起動
最初に試す手段。OSGi フレームワークと Eclipse ランタイムのキャッシュを削除して起動する。
eclipse -clean
bmide.exe -clean
または eclipse.ini に osgi.clean=true を追記して通常起動しても同じ効果がある。
副作用の注意: -clean はキャッシュだけでなく、BundleContext.getDataFile() が返す「バンドルの永続データ領域」も削除する。Configuration Admin などがユーザー設定をこの領域に保存している場合、設定が失われる可能性がある。
Step 2: 特定プラグインキャッシュの削除
Java や Eclipse コアのプラグインに関連するキャッシュのみを削除する。
workspace/.metadata/.plugins/org.eclipse.core.runtime/
workspace/.metadata/.plugins/org.eclipse.jdt.core/
Step 3: ビルドインデックスのリセット
ビルドシステムのリソースインデックスをリセットする。
workspace/.metadata/.plugins/org.eclipse.core.resources/
Step 4: Maven / Gradle キャッシュの削除
Maven や Gradle の統合プラグインに関するキャッシュを削除する。
workspace/.metadata/.plugins/org.eclipse.m2e.*/
workspace/.metadata/.plugins/org.eclipse.buildship.*/
Step 5: メタデータ全削除
Workspace のメタデータをすべて削除する。Eclipse はメタデータを再生成する。プロジェクトデータ(ソースコード等)は Workspace 外に存在するため失われない。
workspace/.metadata/
Step 6: Workspace 全クリア(最終手段)
Workspace 全体を削除するか、新規 Workspace を作成して既存プロジェクトをインポートし直す。プロジェクトデータは Workspace 外に存在するため失われない。
補足:JRE 設定の直接変更(キャッシュ問題を根本回避する方法)
環境変数ではなく Eclipse の GUI から直接 JRE を設定することで、キャッシュ問題の影響を受けずに JDK を切り替えられる。
Preferences → Java → Installed JREs で使用する JDK を手動追加し、デフォルト JRE として指定する。この設定は Workspace 内に保存されるため、環境変数のキャッシュ問題の影響を受けない。
なお、Eclipse JDT は自動的にシステム上の全 JRE をスキャンするわけではない。Eclipse 自身を起動している JRE のみがデフォルトで登録されるため、他のバージョンは手動追加が必要である。
関連トピック
参考
- Eclipse Runtime Options — Eclipse Help — 公式ドキュメント(
-clean・osgi.cleanの定義) - eclipse.ini — Eclipsepedia — 公式 Wiki(
-vmオプションの仕様) - clean wipe out all bundle data · Issue #203 · eclipse-equinox/equinox — GitHub —
-cleanの副作用(バンドル永続データ削除)に関する Issue - Installed JREs — Eclipse Help — JRE 登録の仕様
- BMIDE Standalone Installation Steps — tcinstall.wordpress.com — BMIDE インストール手順(Java 設定)
- Setting up BMIDE for coding and building DLL — plmhandbook.blogspot.com — BMIDE の Java 設定(bmide.bat)