Descripción: el área de trabajo da soporte al concepto de naturalezas de proyecto (o "naturalezas", para abreviar). Una naturaleza asocia un comportamiento de ciclo de vida con un proyecto. Las naturalezas se instalan en función del proyecto mediante el método setDescription definido en org.eclipes.core.resources.IProject. Se configuran automáticamente cuando se abre un proyecto y se desconfiguran cuando éste se cierra. Por ejemplo, la naturaleza Java puede instalar un constructor Java y realizar otra configuración de proyecto cuando se añade a un proyecto.
El punto de extensión de las naturalezas permite a los escritores de naturalezas registrar la implementación de su naturaleza bajo un nombre simbólico que luego se utiliza desde dentro del área de trabajo para localizar y configurar naturalezas. El nombre simbólico es el ID de la extensión de naturaleza. Al definir una extensión de naturaleza, es aconsejable que los usuarios incluyan para el atributo "name" un valor legible por personas que identifique su significado y pueda presentarse potencialmente a los usuarios.
Las naturalezas pueden especificar restricciones de relación con otras naturalezas. La restricción "una sola naturaleza ("one-of-nature") especifica que en un proyecto, y en un momento determinado, sólo puede existir como máximo una naturaleza perteneciente a un conjunto determinado. Esto obliga a la exclusión mutua entre las naturalezas que no sean compatibles entre sí. La restricción "requisito de naturaleza" ("requires-nature") especifica una dependencia con respecto a otra naturaleza. Cuando se añade una naturaleza a un proyecto, también deben añadirse todas las naturalezas que requiera. Las naturalezas se configurarán y desconfigurarán de tal forma que las naturalezas que requieran siempre se configuren antes que ellas y se desconfiguren después de ellas. Para esta razón, las dependencias cíclicas entre naturalezas no están permitidas.
No pueden añadirse ni eliminarse naturalezas de un proyecto si ese cambio va a violar las restricciones satisfechas anteriormente. Si se configura una naturaleza en un proyecto pero luego resulta que no se satisfacen las restricciones, esa naturaleza y todas las naturalezas que la necesitan quedan marcadas como disabled (inhabilitadas), aunque siguen permaneciendo en el proyecto. Esto puede suceder cuando, por ejemplo, falta una naturaleza necesaria en la instalación. Las naturalezas que faltan en la instalación y las naturalezas implicadas en ciclos de dependencias también quedan marcadas como inhabilitadas.
Las naturalezas también pueden especificar los constructores incrementales de proyectos que configuran, si los hay. Con esta información, el área de trabajo garantizará que los constructores sólo se ejecuten cuando su naturaleza correspondiente esté presente y habilitada en el proyecto que se construye. Si una naturaleza se elimina de un proyecto, pero el método deconfigure de la misma no puede eliminar sus constructores correspondientes, el área de trabajo eliminará automáticamente dichos constructores de la especificación. No está permitido que dos naturalezas especifiquen el mismo constructor incremental de proyectos en su código.
Las naturalezas también tienen la posibilidad de impedir la creación de recursos enlazados en los proyectos a los que están asociadas. Estableciendo el atributo allowLinking
en "false", una naturaleza puede declarar que nunca deben crearse recursos enlazados. Esta característica es nueva en el release 2.1.
Códigos XML de configuración:
<!ELEMENT extension (runtime , (one-of-nature | requires-nature | builder)* , options?)>
<!ATTLIST extension
point CDATA #REQUIRED
id CDATA #IMPLIED
name CDATA #IMPLIED
>
<!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)
>
<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>Si estas extensiones estuviesen definidas en un conector cuyo id fuese "com.xyz.coolplugin", el nombre totalmente calificado de las naturalezas sería "com.xyz.coolplugin.fireNature", "com.xyz.coolplugin.waterNature" y "com.xyz.coolplugin.snowNature".
Información sobre las API: el valor del atributo class debe representar un implementador de org.eclipse.core.resources.IProjectNature. Las definiciones de las naturalezas se pueden examinar con la interfaz org.eclipse.core.resources.IProjectNatureDescriptor. Los objetos descriptores se pueden obtener mediante los métodos getNatureDescriptor(String) y getNatureDescriptors() de org.eclipse.core.resources.IWorkspace.
Implementación suministrada: la propia plataforma no posee ninguna naturaleza predefinida. La instalación de algunos productos en particular puede incluir naturalezas en caso necesario.
Copyright (c) 2003 IBM Corporation y otros.
Reservados todos los derechos. Este programa y sus materiales adjuntos están disponibles
bajo los términos de la licencia pública común (Common Public License) v1.0 que acompaña a
esta distribución, y está disponible en
http://www.eclipse.org/legal/cpl-v10.html