プロジェクトとワークスペースの関係。

ちょっと気になったっつうか、誤解してハマる人が出ると困るので、メモ。

Eclipseワークスペースディレクトリの直下のディレクトリしか、Eclipseプロジェクトとして扱わない。というか、直下のディレクトリを全てプロジェクトとして扱う。

そんなに話が単純である訳がないですやん。
それは、あくまでも、デフォルトの挙動
何のために

  • org.eclipse.core.resources.IResource#getFullPath
  • org.eclipse.core.resources.IResource#getLocation

って似ている様で、全く違う挙動をするメソッドがあると思っているのか。
話をややこしくする為に、もう一つ似たようなAPIを持ち出すと、

  • org.eclipse.core.resources.IFile#createLink

なんてのもある。


例えば、JDTのPackage Explorerだとこんな風に見えたとしてもだ。

実際にプロジェクトのプロパティを見ると、
物理ファイルは全然違う所にある可能性もある事を忘れると
リソース生成系の処理をプラグインでやろうとした時にハマるですだよ。


更に言うと、ワークスペースとして指定したディレクトリにあるフォルダの全てをプロジェクトとして扱う訳じゃないよ?
例え、.projectとか、そういうメタデータ抱えたディレクトリだとしてもね。
そういうプロジェクトを作る一番簡単な方法は、

プロジェクトを削除する時に、このチェックボックスをONにしなけりゃいい。


まとめると、
eclipseワークスペースにおけるパスは、管理している対象を論理的に表現する為のモノで、
それは、必ずしも物理的なファイルと直線的かつ簡単な対応関係を持っている訳ではありません。
起動時にワークスペースを格納する為にOSが持つファイルシステム上のパスを指定するけど、
これは、ワークスペースが管理するメタデータを格納する為のパスを指定しているだけであって、
そこに、当該ワークスペースが管理対象とするプロジェクトが存在するのは、単なるデフォルトの挙動ですよ、と。


ま、そゆ事。