注意
本記事は以下の環境で、稼働確認を行いました。
- Windows 10 Home
- Pleiades All in One Eclipse (リリース 2019-06)
ただしWindowsやEclipseの異なるEditionやVersionでも同一の問題が発生することを確認しています。
現象
EclipseによるJavaプログラムの開発において、ワークスペースを開くと、プロジェクトがクローズ状態になっていることがあります。もちろん、そのプロジェクトをクローズした記憶などないにもかかわらずです。
そこでクローズしているプロジェクトをダブルクリックなどで開こうとすると、以下のようなエラーになり、開けないという現象が発生しました。
エラーメッセージは次の通りです。
'sample_project' のプロジェクト記述ファイル (.project) がありません。 このファイルには、プロジェクトに関する重要な情報が含まれています。 このファイルが復元されるまで、プロジェクトは正しく機能しません。
.project
なる隠しファイルがないとのことですが、ファイルシステム上で確認すると、プロジェクトディレクトリ直下に.project
が存在しています。
再現方法
今回の現象が発生する状況はさまざまだと思いますが、わたしの環境では以下の手順を踏むと問題が再現できました。
- ワークスペース
workspace_a
を作成し、その配下にJavaプロジェクトsample_project
を作成する - ワークスペース
workspace_b
を作成。ディレクトリsample_project
をworkspace_a
の配下からworkspace_b
の配下に移動。Eclipse上でファイル > ファイル・システムからプロジェクトを開く
を選択し、sample_project
をインポートする。 - ディレクトリ
workspace_c
を作成。ディレクトリworkspace_b
の配下にあるふたつのディレクトリ.metadata
とsample_project
をworkspace_c
配下に移動する。その後workspace_c
をワークスペースに指定してEclipseを起動すると、上述した現象が再現する。
下図: ファイル > ファイル・システムからプロジェクトを開く
でsample_project
をインポートする際のイメージ
対策1 (おすすめ)
まず開けなくなったプロジェクトを右クリックし削除
を選択。その後ディスク上からプロジェクト・コンテンツを削除
にチェックをつけずにOK
を押下します。
次にファイル > インポート > 既存プロジェクトをワークスペースへ
を選択し、次へ
を押下すると、プロジェクトのインポート
画面が起動します。ここでルートディレクトリの選択
にワークスペースのパスを入力し、さきほど削除したプロジェクトにチェックをつけ、完了
を押下します。すると、さきほどまで正常に開くことができなかったプロジェクトが開けるようになっているはずです。
対策2 (おすすめでない)
プロジェクトが正常に開けなくなる原因はエラーメッセージにある.project
ファイルではなく、.location
ファイルが不正な状態に置かれたためです。.location
ファイルのパスは次の通りになります: ${workspace}/.metadata/.plugins/org.eclipse.core.resources/.projects/${project_name}/.location
ここでは、開けなくなったプロジェクトの.location
ファイルを削除します。するとEclipseの再起動などなくとも、開けなかったプロジェクトが開けるようになっています。
ただし.metadata
以下のファイルやディレクトリの管理はEclipseに任せるべきであり、手動で触るべきではありません。個人的な経験則では.location
を削除しても問題になったことはありませんが、念のため、事前にバックアップをとるか、非可逆的に破壊されても問題ない環境で実施してください。
詳細
sample_project
の.location
は次のパスになります: workspace_c/.metadata/.plugins/org.eclipse.core.resources/.projects/sample_project/.location
.location
ファイルはバイナリなので、正確な内容は不明ですが、テキストエディタなどで無理やり開いてやると、なにやら絶対パスでworkspace_b/sample_project
を参照しているような記述が見て取れます。
「再現方法」の手順3.において、sample_project
をworkspace_b
からworkspace_c
に移動しており、workspace_b/sample_project
は存在しません。つまり存在しないパスを参照しているためにプロジェクトが正常に開けなくなっているものと考えられます。
最後に「.location
ファイルになぜ絶対パスが書かれてしまうのか?」という疑問ですが、正直なところこれはよくわかりません(´・ω・`) 手順2.のファイル > ファイル・システムからプロジェクトを開く
が悪さをしているような気がしますが、詳細は不明です。
そもそも.metadata
ディレクトリはそのワークスペースのメタデータを格納しています。つまり.metadata
はワークスペースごとに固有であるべきにもかかわらず、手順3.で別のワークスペースの.metadata
を移動しています。根本的にはこれがよくないといえそうです。