Cosas a tener en cuenta antes de desarrollar un plugin.
Cuando vayamos a desarrollar un proyecto para gvSIG 2.0 deberemos tener en cuenta
varias cosas si queremos que éste tenga el respaldo oficial de gvSIG y pase a formar
parte de la distribución oficial de gvSIG.
* Se usará maven como herramienta de contrucción del proyecto.
Maven define un nombre de grupo, *groupId* y de identificador, *artifactId*, de
nuestro proyecto. Se usará como *groupId* *org.gvsig* y como *artifactId*
el *groupId* seguido de un identificador de nuestro proyecto.
Por ejemplo si estamos creando un plugin para gvSIG de topografía
los paquetes de nuestro proyecto comenzarán todos por *org.gvsig.topography*.
El *artifactId* se usará para:
* Identificar el paquete raíz de nuestro proyecto java. Todos nuestros
paquetes comenzarán por el *artifactId*.
* El nombre de nuestro proyecto de eclipse. Los proyectos de eclipse de
nuestro desarrollo se nombrarán igual que el *artifactId*.
* Los jars generados por nuestro proyecto comenzarán por el *artifactId*
seguidos de la versión del proyecto y el *clasificador* de maven.
* Deberá haber una separación estricta entre API e implementación.
Parece tema obvio, pero es muy frecuente que no exista esta separacion,
y cuando existe no suele ser tan estricta como se requiere desde gvSIG.
Los principales motivos de esto responden a temas como:
* ¿Cómo podemos realizar valoraciones del alcance
de una modificación dentro del código? ¿Cuál sería el impacto
en la aplicación gvSIG si modificamos esto?
Si tenemos definidos
los APIs de forma estricta facilita enormemente el dar respuesta
a esta pregunta.
* ¿Cómo podemos documentar correctamente el uso de las librerías?.
Si tenemos separada la implementación del API, es fácil centrarnos
en documentar solo el API sin que se nos ande mezclando éste con
la implementación.
* ¿Cómo podemos realizar test automatizados de nuestra librería?.
Si disponemos de un API claro y bien delimitado, podemos centrarnos
en preparar test automatizados que comprueben las especificaciones
del API de forma que podamos verificar fácilmente que un cambio en
la implementación afecta o no a los consumidores del API.
* Deberá existir un sistema de test automatizados que verifiquen
el funcionamiento del API de nuestro proyecto. Hasta la fecha se
está usando *junit* para realizar estas tareas.
* Los APIs deberán estar documentados y esta documentación subida a un sitio
público.
Para la documentación de los APIs se usarán los javadocs sobre los interfaces
y clases del API. La documentación del API deberá ser completa y en inglés.
Para generar y desplegar éste se aprovechará la utilidad de maven para la
generación de *sites*.
* Deberán estar identificadas las dependencias de nuestro proyecto con otras librerías.
Esto se realizará a través de maven manteniendo actualizado *ManageDependencies* en
el proyecto maven raíz.
* Deberá adjuntarse a nuestro proyecto un plan de pruebas. Este plan de pruebas
funcionará a modo de una batería de pruebas de aceptación que el proyecto deberá
pasar tras cada construcción de un instalable de gvSIG para una versión final.
* Se deberá confeccionar en ReST la documentación de usuario del proyecto.
Seria deseable que esta documentación se entregase en inglés.
* Deberán desplegarse los jars de nuestro proyecto en un repositorio de maven,
y seguir una política de versionado acorde a los cambios que se realicen en
el proyecto. gvSIG dispone de un repositorio de maven propio en el que
desplegar las librerías, pero puede utilizarse otro si se considera adecuado.
* Sería deseable la generación de una *guía para el desarrollador* que guiase
a un desarrollador que se inicia en la utilización de las librerías del proyecto.
Siempre que fuese posible esta guía debería estar en inglés.
* Si generamos un empaquetado de nuestro plugin para gvSIG deberemos cerciorarnos
de que éste lleva un numero de build único.
Debe existir una forma de identificar una distribución o empaquetado de nuestro
plugin que no de lugar a dudas sobre que versión es. Para esto se le asigna
un número de build a cada empaquetado de gvSIG.