プロジェクト・ネーチャーによって、プラグインはプロジェクトを特定の種類のプロジェクトとしてタグ付けできます。たとえば Java 開発ツール (JDT) は、"Java の特質" を使用して Java 固有の振る舞いをプロジェクトに追加します。
特質はプロジェクトごとにインストールされ、プロジェクトに追加されるときに自動的に構成され、 除去時に構成解除されます。 1 つのプロジェクトは複数の特質を持つことができます。
ユーザー固有の特質をインプリメントするには、拡張を定義して、IProjectNature をインプリメントするクラスを指定します。
org.eclipse.core.resources.natures 拡張ポイントは、プロジェクト特質定義の追加で使用します。次のマークアップは、com.example.natures 仮想プラグイン用の特質を追加します。
<extension
point="org.eclipse.core.resources.natures"
id="mynature"
name="My Nature">
<runtime>
<run class="com.example.natures.MyNature">
</run>
</runtime>
</extension>
拡張で識別されるクラスは、 プラットフォーム・インターフェース IProjectNature をインプリメントする必要があります。このクラスは、 特質の構成時に、特質の固有情報をプロジェクトに関連付けるために、プラグイン固有の振る舞いをインプリメントします。
public class MyNature implements IProjectNature {
private IProject project;
public void configure() throws CoreException {
// Add nature-specific information
// for the project, such as adding a builder
// to a project's build spec.
}
public void deconfigure() throws CoreException {
// Remove the nature-specific information here.
}
public IProject getProject() {
return project;
}
public void setProject(IProject value) {
project = value;
}
}
configure() および deconfigure() メソッドは、特質が、 プロジェクトに追加および除去されるときに、プラットフォームによって送信されます。 『ビルダー』で解説されているように、 configure() メソッドをインプリメントして、 ビルダーをプロジェクトに追加できます。
一度特質を定義して、そのクラスをインプリメントすると、特質をプロジェクトに割り当てる必要があります。次のコードの断片は、ユーザーの新規特質を指定されたプロジェクトに割り当てています。
try {
IProjectDescription description = project.getDescription();
String[] natures = description.getNatureIds();
String[] newNatures = new String[natures.length + 1];
System.arraycopy(natures, 0, newNatures, 0, natures.length);
newNatures[natures.length] = "com.example.natures.mynature";
description.setNatureIds(newNatures);
project.setDescription(description, null);
} catch (CoreException e) {
// Something went wrong
}
特質で使用される ID は特質拡張の完全修飾名 (プラグイン ID + 拡張 ID) です。
通常特質は、作成時にプロジェクトに追加されます。 一般的にユーザーは、 ユーザーのプロジェクトに関する専門化された情報をキャプチャーし、ユーザーの特質をその情報に割り当てる、 カスタマイズされた新規プロジェクト・ウィザードを提供します。