Beschreibung: Der Arbeitsbereich unterstützt das Konzept von Projektgattungen (kurz als "Gattungen" bezeichnet). Eine Gattung ordnet einem Projekt ein Lebenszyklusverhalten zu. Gattungen werden unter Verwendung der in org.eclipse.core.resources.IProject definierten Methode setDescription auf einer Pro-Projekt-Basis installiert. Sie werden beim Hinzufügen zu einem Projekt automatisch konfiguriert und beim Entfernen aus einem Projekt dekonfiguriert. Die Java-Gattung kann nach Hinzufügen zu einem Projekt beispielsweise ein Java-Erstellungsprogramm installieren und andere Projektkonfigurationen ausführen.
Am Erweiterungspunkt für Gattungen können Gattungs-Writer ihre Gattungsimplementierung unter einem symbolischen Namen registrieren, der dann im Arbeitsbereich verwendet wird, um Gattungen aufzufinden und zu konfigurieren. Der symbolische Name ist die Kennung der Gattungserweiterung. Beim Definieren einer Gattungserweiterung sollten Benutzer einen aussagekräftigen Wert für das Attribut "name" verwenden, das ihre Bedeutung Gattung kennzeichnet und möglicherweise auch für andere Benutzer angezeigt wird.
Gattungen können Beziehungseinschränkungen mit anderen Gattungen angeben. Die Einschränkung "one-of-nature" (eine der Gattungen) gibt an, dass zu einem beliebigen Zeitpunkt jeweils höchstens eine Gattung aus einer bestimmten Gruppe auf einem Projekt vorhanden sein kann. Dies setzt den gegenseitigen Ausschluss von nicht kompatiblen Gattungen durch. Die Einschränkung "requires-nature" (Gattung erforderlich) gibt eine Abhängigkeit von einer anderen Gattung an. Wenn eine Gattung einem Projekt hinzugefügt wird, müssen alle erforderlichen Gattungen ebenfalls hinzugefügt werden. Beim Konfigurieren bzw. Dekonfigurieren der Gattungen ist sichergestellt, dass deren erforderliche Gattungen immer im Voraus konfiguriert bzw. im Anschluss dekonfiguriert werden. Von daher sind keine zyklischen Abhängigkeiten zwischen Gattungen zulässig.
Gattungen können einem Projekt nicht hinzugefügt bzw. nicht aus einem Projekt entfernt werden, wenn diese Änderung gegen zuvor erfüllte Einschränkungen verstoßen würde. Wenn eine Gattung auf einem Projekt konfiguriert ist und es sich später herausstellt, dass ihre Einschränkungen nicht erfüllt werden, werden diese Gattung und alle von ihr erforderten Gattungen als inaktiviert markiert, bleiben aber auf dem Projekt vorhanden. Dies kann beispielsweise vorkommen, wenn eine erforderliche Gattung aus der Installation verlorengeht. Gattungen, die in der Installation fehlen, sowie Gattungen in Abhängigkeitszyklen werden ebenfalls als "inaktiviert" markiert.
Gattungen können darüber hinaus angeben, welche Programme zur schrittweisen Projekterstellung von ihnen konfiguriert werden (falls zutreffend). Mit Hilfe dieser Informationen stellt der Arbeitsbereich sicher, dass Erstellungsprogramme nur ausgeführt werden, wenn ihre zugehörige Gattung auf dem zu erstellenden Projekt vorhanden und aktiviert ist. Wenn beim Entfernen einer Gattung aus einem Projekt die zugehörigen Erstellungsprogramme von der Dekonfigurationsmethode der Gattung nicht entfernt werden, entfernt der Arbeitsbereich diese Erstellungsprogramme automatisch aus der Erstellungsspezifikation. Es ist nicht zulässig, dass zwei Gattungen in ihrer Formatierungssteuerung das gleiche Programm zur schrittweisen Projekterstellung angeben.
Konfigurationsbefehle:
<!ELEMENT runtime run?>
<!ELEMENT run parameter*>
<!ATTLIST run
class
CDATA #REQUIRED
>
Beispiele:
Im Folgenden ist ein Beispiel für drei Gattungskonfigurationen aufgeführt. Die Konfigurationen "waterNature" und "fireNature" gehören zu demselben exklusiven Set. Von daher können sie nicht im gleichen Projekt koexistieren. Die Konfiguration "snowNature" erfordert "waterNature". Von daher wird "snowNature" in Projekten inaktiviert, in denen "waterNature" nicht vorhanden ist. Es ergibt sich logischerweise, dass "snowNature" auf einem Projekt mit "fireNature" nicht aktiviert werden kann.
<extension id="fireNature" name="Fire Nature" point="org.eclipse.core.resources.natures">
<runtime>
<run class="com.xyz.natures.Fire"/>
</runtime>
<one-of-nature id="com.xyz.stateSet"/>
</extension>
<extension id="waterNature" name="Water Nature"
point="org.eclipse.core.resources.natures">
<runtime>
<run class="com.xyz.natures.Water"/>
</runtime>
<one-of-nature id="com.xyz.stateSet"/>
</extension>
<extension id="snowNature" name="Snow Nature" point="org.eclipse.core.resources.natures">
<runtime>
<run class="com.xyz.natures.Snow">
<parameter name="installBuilder" value="true"/>
</run>
</runtime>
<requires-nature id="com.xyz.coolplugin.waterNature"/>
<builder id="com.xyz.snowMaker"/>
</extension>
Wenn diese Erweiterungen in einem Plug-in mit der Kennung "com.xyz.coolplugin" definiert wurden, wären die vollständig qualifizierten Namen dieser Gattungen "com.xyz.coolplugin.fireNature", "com.xyz.coolplugin.waterNature" und "com.xyz.coolplugin.snowNature".
API-Informationen: Der Wert des Attributs class muss ein Implementierungselement von org.eclipse.core.resources.IProjectNature sein. Gattungsdefinitionen können unter Verwendung der Schnittstelle org.eclipse.core.resources.IProjectNatureDescriptor untersucht werden. Diese Deskriptorobjekte können mit Hilfe der Methoden getNatureDescriptor(String) und getNatureDescriptors() auf org.eclipse.core.resources.IWorkspace abgerufen werden.
Bereitgestellte Implementierung: Die Plattform selbst stellt keine vordefinierten Gattungen bereit. Spezielle Produktinstallationen können ggfs. Gattungen enthalten.