Compilar un proyecto
En la siguiente figura puedes ver la versión 1.1 de gvSIG, abierta desde Eclipse.
No hay que asustarse por la cantidad de proyectos (bueno, un poco sí... ;-)). Lo primero que vamos a hacer es trabajar sólo con los imprescindibles. Poco a poco, si necesitas modificar o ver el código del resto de los plugins, puedes ir abriendo y compilando los que necesites.
MUY IMPORTANTE: Para realizar la primera compilación, sigue las instrucciones que aparecen en el fichero Leeme.txt. En cada distribución puede variar un poco el método y/o los argumentos, pero será similar.
Básicamente hay 2 métodos, uno semiautomático, que compila todos los proyectos y otro “manual”, que consiste en buscar los ficheros build.xml de cada proyecto y ejecutarlos como una tarea de ant. Es importante seguir el orden establecido para evitar problemas.
Una vez compilados los proyectos, podemos empezar a trabajar.
Lo mejor, es trabajar solo con los proyectos que vamos a necesitar. Cierra los proyectos de las extensiones que no te interesen, y deja abiertos como mínimo estos:
- _fwAndami
- libCorePlugin
- libFMap
- appgvSIG
Si te interesan funcionalidades de edición, deja también el proyecto extCAD, y si vas a trabajar con bases de datos espaciales, extJDBC. Si lo tuyo es el raster, seguramente necesitarás libCq CMS for java y extRasterTools.
Para comenzar, deja también un proyecto de ejemplo: extNewDocumentExample. Nos servirá como punto de partida para nuestro primer plugin.
Cada proyecto tiene un fichero build.xml que se ejecuta como una tarea ant (botón derecho del ratón, run as... | ant tool.
En el fichero build.xml definimos qué nombre va a tener nuestro plugin, así como las librerías y ficheros que necesita para funcionar. Por ejemplo:
<project name="exaWorkshop" default="generate-without-source" basedir=".">
<description>
Examples for workshop on III Jornadas gvSIG
</description>
<!-- set global properties for this build -->
<property name="src" location="src"/>
<property name="build" location="bin"/>
<property name="dist" location="dist"/>
<property name="mainplugin" value="com.iver.cit.gvsig"/>
<property name="plugin" value="org.gvsig.workshop"/>
<property name="gvsiglibjar" value="org.gvsig.workshop"/>
<property name="andami" location="../_fwAndami" />
<property name="extensionsDir" location="../_fwAndami/gvSIG/extensiones"/>
<property name="lib-dir" location="${extensionsDir}/${mainplugin}/lib"/>
<target name="init">
<!-- Create the time stamp -->
<tstamp/>
<!-- Create the build directory structure used by compile -->
<mkdir dir="${build}"/>
<mkdir dir="${dist}"/>
</target>
<target name="generate-without-source"
description="generate the distribution without the source file">
<!-- Create the distribution directory -->
<mkdir dir="${dist}"/>
<!-- Put everything in ${build} into the MyProject-${DSTAMP}.jar file -->
<jar jarfile="${dist}/${plugin}.jar" basedir="${build}" includes="org/gvsig/workshop/**"
/>
<copy todir="${dist}/images">
<fileset dir="images" includes="*"/>
</copy>
<copy file="config/config.xml" todir="${dist}"/>
<copy todir="${dist}">
<fileset dir="config" includes="text*.properties"/>
</copy>
<move todir="${extensionsDir}/${plugin}/">
<fileset dir="${dist}" includes="**/**"/>
</move>
</target>
<target name="compile" description="compile the source" >
<!-- Compile the Java code from ${src} to ${build} -->
<mkdir dir="${build}" />
<echo>${compile-classpath}</echo>
<javac srcdir="${src}"
destdir="${build}"
debug="${debug}"
debuglevel="${debuglevel}"
classpath="${compile-classpath}"/>
</target>
<target name="copy-data-files">
<copy file="config/config.xml" todir="${dist}"/>
<copy todir="${dist}">
<fileset dir="config" includes="text*.properties"/>
</copy>
</target>
<target name="move-to-andami">
<move todir="${extensionsDir}/${plugin}/">
<fileset dir="${dist}" includes="**/**"/>
</move>
</target>
<target name="clean"
description="clean up" >
<!-- Delete the ${build} and ${dist} directory trees -->
<delete dir="${dist}"/>
<delete dir="${build}"/>
</target>
</project>
En el fichero se definen los directorios con los que se va a trabajar, y dónde se quiere poner el resultado de la compilación. Las variables más importantes son:
- ${extensionsDir} => El directorio donde vamos a copiar todo.
- ${plugin} => El nombre del plugin.
En el fichero puedes ver los objetivos (target) que define el fichero: para inicializarse, para borrar el directorio temporal, para copiar los ficheros con las imágenes de los botones, el fichero config.xml, etc.
Lo que está en negrita es lo que normalmente necesitarás cambiar (el nombre de tu plugin y las clases que vas a incluir en el .jar, básicamente).
La forma más sencilla de comenzar un nuevo plugin de gvSIG es copiar este ejemplo, comprobar que compila y que funciona y luego hacer los cambios necesarios en los nombres de los paquetes, el fichero config.xml y el fichero build.xml. Después, lo mejor es fijarnos en si existe alguna funcionalidad dentro de gvSIG ya implementada similar a la que queremos nosotros implementar. Seguramente será así (pinchar en el mapa, consultar una capa y mostrar un formulario con los datos de la selección, añadir una capa por código, añadir una tabla, abrir un proyecto, hacer un zoom a lo seleccionado,...).
Una vez identificados los comportamientos comunes con nuestro plugin, es hora de investigar dento de gvSIG cuales son las extensiones que hacen esas tareas. Lo veremos con más detenimiento más tarde, en la descripción de appgvSIG, pero por ahora basta señalar que el punto de entrada a nuestra búsqueda será el fichero config.xml, donde encontraremos el menú o botón, y la clase que se ejecuta al seleccionar la opción que que queremos que nos sirva como modelo.