Durch Projektarten kann ein Plug-in ein Projekt mit einer bestimmten Projektart kennzeichnen. JDT (Java Development Tools - Java-Entwicklungstools) verwendet beispielsweise eine Java-Gattung, um Projekten ein Java-spezifisches Verhalten hinzuzufügen. Projektgattungen werden durch Plug-ins definiert und normalerweise projektspezifisch hinzugefügt oder entfernt, wenn der Benutzer eine durch das Plug-in definierte Aktion ausführt.
Einem Projekt können mehrere Gattungen zugeordnet sein. Wenn Sie eine Projektgattung definieren, können Sie jedoch besondere Einschränkungen für die Gattung definieren:
Wenn Sie einen eigenen Typ implementieren wollen, müssen Sie eine Erweiterung definieren und eine Klasse zur Verfügung stellen, die IProjectNature implementiert.
Am Erweiterungspunkt org.eclipse.core.resources.natures können Sie eine Definition für einen Projekttyp hinzufügen. Die folgende Formatierung fügt dem hypothetischen Plug-in com.example.natures einen Typ hinzu:
<extension point="org.eclipse.core.resources.natures" id="myNature" name="Mein Typ"> <runtime> <run class="com.example.natures.MyNature"> </run> </runtime> </extension>
Die in der Erweiterung angegebene Klasse muss die Plattformschnittstelle IProjectNature implementieren. Diese Klasse implementiert ein Plug-in-spezifisches Verhalten für die Zuordnung von typspezifischen Informationen zu einem Projekt, wenn der Typ konfiguriert ist.
public class MyNature implements IProjectNature { private IProject project; public void configure() throws CoreException { // Typspezifische Informationen für das Projekt // hinzufügen, z. B. Erstellungsprogramm zur // Erstellungsspezifikation eines Projekts } public void deconfigure() throws CoreException { // Typspezifische Informationen hier entfernen. } public IProject getProject() { return project; } public void setProject(IProject value) { project = value; } }
Die Methoden configure() und deconfigure() werden durch die Plattform gesendet, wenn Typen zu einem Projekt hinzugefügt oder aus diesem entfernt werden. Sie können die Methode configure() implementieren, um ein Erstellungsprogramm zu einem Projekt hinzuzufügen. Dies wird unter Erstellungsprogramme erläutert.
Wenn Sie einem Projekt eine Gattung zuordnen wollen, ist es nicht ausreichen, lediglich die Gattung zu definieren. Zur Zuordnung einer Gattung zu einem Projekt müssen Sie die Beschreibung des Projekts aktualisieren und die Gattung in diese Beschreibung aufnehmen. Normalerweise erfolgt dies, wenn ein Benutzer ein neues Projekt mit einem speziellen Assistenten für neue Projekte erstellt, der die Gattung zuordnet. Der folgende Codeausschnitt zeigt, wie einem vorhandenen Projekt eine neue Gattung zugeordnet wird:
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) { // Ein Fehler ist aufgetreten }
Gattungen werden erst dann tatsächlich zum Projekt hinzugefügt (und für dieses konfiguriert), wenn die Projektbeschreibung im Projekt definiert wird. Außerdem ist zu beachten, dass als Gattungs-ID der vollständig qualifizierte Name (Plug-in-ID + Erweiterungs-ID) der Gattungserweiterung verwendet werden muss.
Falls für die Gattung Einschränkungen definiert wurden, kann die neue Gattung mit Hilfe der Arbeitsbereichs-API ausgewertet werden. Als Beispiel soll angenommen werden, dass eine Gattung mit einer Einschränkung definiert ist:
<extension point="org.eclipse.core.resources.natures" id="myOtherNature" name="My Other Nature"> <runtime> <run class="com.example.natures.MyOtherNature"> </run> </runtime> <requires-nature id="com.example.natures.myNature"/> </extension>
Die neue Gattung ist erst dann gültig, wenn die erste Gattung für das Projekt definiert wurde. Abhängig vom Aufbau des Plug-ins ist es unter Umständen sinnvoll, wenn Sie prüfen, ob die vorausgesetzte Gattung installiert wurde, oder wenn Sie die vorausgesetzte Gattung selber hinzufügen. Bei beiden Möglichkeiten können Sie jedoch die Gültigkeit der vorgeschlagenen Kombinationen von Projektgattungen mit der Arbeitsbereichs-API prüfen.
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.myOtherNature"; IStatus status = workspace.validateNatureSet(natures); // Status prüfen und Aktion bestimmen if (status.getCode() == IStatus.OK) { description.setNatureIds(newNatures); project.setDescription(description, null); } else { // Benutzerfehler ausgeben ... } } catch (CoreException e) { // Ein Fehler ist aufgetreten }
Mit Gattungen können Sie nicht nur über die ID arbeiten, sondern hierzu auch den Deskriptor (IProjectNatureDescriptor) abrufen, der eine Gattung, ihre Einschränkungen und ihre Bezeichnung abfragt. Sie können eine bestimmte Gattung nach ihrem Deskriptor abfragen oder aber die Deskriptoren aus dem Arbeitsbereich abrufen. Der folgende Codeausschnitt ruft den Projektgattungsdeskriptor für die neue Gattung ab:
IProjectNatureDescriptor descriptor = workspace.getNatureDescriptor("com.example.natures.myOtherNature");
Sie können auch einen Deskriptorenbereich für alle installierten Gattungen abrufen:
IProjectNatureDescriptor[] descriptors = workspace.getNatureDescriptors();