Projektgattungen

Kennung: org.eclipse.core.resources.natures

Beschreibung: Der Arbeitsbereich unterstützt das Konzept der Projektgattungen (kurz "Gattungen" genannt). Über eine Gattung wird einem Projekt ein bestimmtes Verhalten für seine Gültigkeitsdauer zugeordnet. Gattungen werden projektbezogen unter Verwendung der Methode "setDescription" installiert, die für org.eclipes.core.resources.IProject definiert ist. Sie werden automatisch konfiguriert, sobald ein Projekt geöffnet wird, und dekonfiguriert, sobald ein Projekt geschlossen wird. Wird beispielsweise die Gattung "Java" zu einem Projekt hinzugefügt, kann ein Java-Erstellungsprogramm installiert und eine weitere Projektkonfiguration vorgenommen werden.

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 ID der Gattungserweiterung. Beim Definieren einer Gattungserweiterung sollten Benutzer unbedingt einen aussagekräftigen Wert für das Attribut "name" angeben, der die Bedeutung der Gattung kenntlich macht und auch für Benutzer angezeigt werden kann.

Gattungen können Integritätsbedingungsbeziehungen zu anderen Gattungen angeben. Die Integritätsbedingung "one-of-nature" gibt an, dass in einem Projekt jeweils höchstens eine Gattung aus einer bestimmten Gruppe vorhanden sein kann. Dies setzt den gegenseitigen Ausschluss von Gattungen durch, die nicht miteinander kompatibel sind. Die Integritätsbedingung "requires-nature" gibt die Abhängigkeit von einer anderen Gattung an. Wird eine solche Gattung zu einem Projekt hinzugefügt, müssen alle erforderlichen Gattungen ebenfalls hinzugefügt werden. Die Gattungen werden garantiert so konfiguriert und dekonfiguriert, dass die von ihnen benötigten Gattungen vor ihnen konfiguriert und nach ihnen dekonfiguriert werden. Aus diesem Grund sind zyklische Abhängigkeiten zwischen Gattungen nicht zulässig.

Gattungen können nicht zu einem Projekt hinzugefügt bzw. aus ihm entfernt werden, wenn diese Änderung Integritätsbedingungen verletzen würde, die zuvor erfüllt wurden. Falls eine Gattung für ein Projekt konfiguriert wird, später allerdings feststellt, dass ihre Integritätsbedingungen nicht erfüllt werden, werden diese Gattung und alle Gattungen, die sie voraussetzen, als inaktiviert gekennzeichnet, verbleiben aber im Projekt. Dies kann beispielsweise eintreten, wenn eine erforderliche Gattung bei der Installation fehlt. Gattungen, die bei der Installation fehlen werden ebenso als inaktiviert gekennzeichnet wie Gattungen, die an Abhängigkeitszyklen beteiligt sind.

Gattungen können außerdem angeben, welche schrittweisen Projekterstellungsprogramme ggfs. durch sie konfiguriert werden. Mit diesen Informationen stellt der Arbeitsbereich sicher, dass Erstellungsprogramme nur dann ausgeführt werden, wenn die zugehörige Gattung vorhanden und im Projekt, das erstellt werden soll, aktiviert ist. Falls eine Gattung aus einem Projekt entfernt wurde, die Dekonfigurationsmethode der Gattung jedoch die entsprechenden Erstellungsprogramme nicht entfernen kann, entfernt der Arbeitsbereich diese Erstellungsprogramme automatisch aus der Spezifikation. Zwei Gattungen dürfen in ihren Konfigurationsbefehlen nicht dasselbe schrittweise Projekterstellungsprogramm angeben.

Gattungen können die Erstellung von verlinkten Ressourcen in Projekten, denen sie zugeordnet sind, verhindern. Wenn Sie das Attribut allowLinking auf "false" setzen, kann eine Gattung deklarieren, dass verlinkte Ressourcen in keinem Fall erstellt werden. Diese Funktionsweise ist erstmals in Release 2.1 verfügbar.

Konfigurationsbefehle:

   <!ELEMENT extension (runtime , (one-of-nature | requires-nature | builder)* , options?)>

   <!ATTLIST extension
     point CDATA #REQUIRED
     id    CDATA #IMPLIED
     name  CDATA #IMPLIED
   >

   <!ELEMENT runtime (run)>

   <!ELEMENT run (parameter*)>

   <!ATTLIST run
     class CDATA #REQUIRED
   >

   <!ELEMENT parameter EMPTY>

   <!ATTLIST parameter
     name  CDATA #REQUIRED
     value CDATA #REQUIRED
   >

   <!ELEMENT one-of-nature EMPTY>

   <!ATTLIST one-of-nature
      id CDATA #REQUIRED
   >

   <!ELEMENT requires-nature EMPTY>

   <!ATTLIST requires-nature
      id CDATA #REQUIRED
   >

   <!ELEMENT builder EMPTY>

   <!ATTLIST builder
      id CDATA #REQUIRED
   >

   <!ELEMENT options EMPTY>

   <!ATTLIST options
     allowLinking (true | false)
   >

Beispiele: Das folgende Beispiel zeigt drei Gattungskonfigurationen. Die Gattungen "waterNature" und "fireNature" gehören zur gleichen exklusiven Gruppe, weshalb sie nicht in demselben Projekt koexistieren können. Die Gattung "snowNature" erfordert die Gattung "waterNature". Daher wird "snowNature" in einem Projekt inaktiviert, in dem "waterNature" fehlt. Daraus folgt logischerweise, dass "snowNature" in einem Projekt mit "fireNature" nicht aktiviert werden kann. Die Gattung "fireNature" lässt außerdem die Erstellung von verlinkten Ressourcen nicht zu.

 
   <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"/>
       <options allowLinking="false"/>
   </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 eine Implementierung von org.eclipse.core.resources.IProjectNature sein. Gattungsdefinitionen können unter Verwendung der Schnittstelle org.eclipse.core.resources.IProjectNatureDescriptor untersucht werden. Die Deskriptorobjekte können mit Hilfe der Methoden getNatureDescriptor(String) und getNatureDescriptors() aus org.eclipse.core.resources.IWorkspace abgerufen werden.

Bereitgestellte Implementierung: Die Plattform selbst verfügt nicht über vordefinierte Gattungen. Spezielle Produktinstallationen können ggfs. Gattungen enthalten.

Copyright (c) 2003 IBM Corporation und Andere. Alle Rechte vorbehalten. Dieses Programm und sein Begleitmaterial werden gemäß den Bedingungen der "Common Public License v1.0" bereitgestellt, die die vorliegende Verteilung begleitet und unter http://www.eclipse.org/legal/cpl-v10.html abgerufen werden kann.