注意
本記事は以下の環境で、稼働確認を行いました。
- 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を移動しています。根本的にはこれがよくないといえそうです。






