Persistencia de Objetos Java: El Camino hacia Hibernate

En esta pgina reemplazaremos el aburrido fichero build.bat con un bonito y pequeo fichero de construccin ant. Necesitars instalar ant -- puedes obtenerlo de su pgina de descarga. Aqu no cubriremos como instalar ant. Por favor mir su manual. Despus de haber instalado ant, puedes empezar a crear el fichero de construccin. Se llamar build.xml y lo situars en el directorio de trabajo en lugar del fichero build.bat (que puedes borrar).

.Un Fichero de Construccin Bsico

Un fichero de construccin bsico se parece a sto:

<project name="hibernate-tutorial" default="compile">

    <target name="compile">

    </target>

</project>

Las etiquetas <project> rodean todo el fichero de construccin. Hay dos atributos; name que da nombre al proyecto que se est construyendo, y default que especifica el objetivo por defecto que se ejecutar cuando lo lanzemos sin especificar ningn objetivo.

Dentro de las etiquetas <project>, debemos tener al menos un bloque <target>, donde podemos decirle a ant lo que tiene que hacer -- en este caso no hara nada. Podemos ejecutar el el fichero de construccin utiliando ant en la lnea de comandos desde el directorio de trabajo.

Deberas obtener una salida como sta:

Buildfile: build.xml

compile:

BUILD SUCCESSFUL
Total time: 1 second

Este nos dice que ant se ejecut con xito y qu fichero de construccin se utiliz. Se ejecut el objetivo por defecto, que es por lo que la salida muestra compile:. Sin embargo podemos hacer que ant ejecute un objetivo explcito lamandolo con ant compile desde la lnea de comandos, que ejecutar el objetivo compile.

Ahora queremos que ant realmente complie nuestras clases. Por eso insertamos la tarea <javac> dentro de los elementos <target>:

<project name="hibernate-tutorial" default="compile">

    <target name="compile">
      <javac srcdir="./src"
             destdir="./bin"
             debug="on"
      />
    </target>

</project>

Esto le dir a ant que lance el compilador javac y compile todo lo que pueda encontrar bajo el directorio src y site los ficheros class generados en el directorio bin. Sin embargo si ejecutamos ant ahora, obtendremos un montn de errores de compilacin, porque el compilador no puede encontrar las clases de Hibernate. Tenemos que decirle al compilador qu classpath utilizar, como lo hicimos en build.bat:

<project name="hibernate-tutorial" default="compile">

    <target name="compile">
      <javac srcdir="./src"
             destdir="./bin"
             debug="on"
      >
      
          <classpath>
              <fileset dir="./lib">
                  <include name="*.jar"/>
              </fileset>
          </classpath>        
      </javac>
    </target>

</project>

Esto le dir a ant que encuentre todos los ficheros que terminen en ".jar" que haya en el directorio lib y los aada al classpath usado para la compilacin. Si ejecutamos ahora ant, deberamos ver una salida como sta:

C:\hibernateTutorial\part2>ant
Buildfile: build.xml

compile:
    [javac] Compiling 2 source files to C:\hibernateTutorial\part2\bin

BUILD SUCCESSFUL
Total time: 1 second

.Objetivos Dependientes

Perfecto, ya hemos conseguido que ant compile nuestros ficheros Java. Sin embargo todava tenemos que copiar el fichero log4j.properties y el fichero de mapeo al directorio bin. Haremos esto utilizando un objetivo adicional:

<project name="hibernate-tutorial" default="compile">

    <target name="compile">
      <javac srcdir="./src"
             destdir="./bin"
             debug="on"
      >
      
          <classpath>
              <fileset dir="./lib">
                  <include name="*.jar"/>
              </fileset>
          </classpath>        
      </javac>
    </target>
    
    <target name="copy-resources">
        <copy todir="./bin">
            <fileset dir="./src">
                <exclude name="**/*.java"/>
            </fileset>
        </copy>
    </target>

</project>

Esto le dice a ant que ejecute el objetivo copy-resources para copiar todo lo que pueda encontrar en el directorio src o en cualqueir directorio bajo l al directorio bin, pero excluyendo cualquier fichero Java que pueda haber en cualquier lugar bajo el directorio src (esto es lo que significan los ** delante de la /).

Si ejecutas ant ahora, vers ... realmente nada. Ant ejecutar el objetivo compile y no tocar el objetivo copy-resources. Por eso, lo que necesitamos hacer ahora es decirle a ant que ejecute copy-resources antes del objetivo compile - esto es lo que hace el atributo depents del elemento target:

<project name="hibernate-tutorial" default="compile">

    <target name="compile" depends="copy-resources">
      <javac srcdir="./src"
             destdir="./bin"
             debug="on"
      >
      
          <classpath>
              <fileset dir="./lib">
                  <include name="*.jar"/>
              </fileset>
          </classpath>        
      </javac>
    </target>
    
    <target name="copy-resources">
        <copy todir="./bin">
        <fileset dir="./src">
            <exclude name="**/*.java"/>
        </fileset>
    </copy>
    </target>

</project>

Si lo ejecutas ahora, ant debera mostrar una salida como sta:

Buildfile: build.xml

copy-resources:
     [copy] Copying 3 files to C:\hibernateTutorial\part2\bin

compile:

BUILD SUCCESSFUL
Total time: 0 seconds

Ahora ant ha ejecutado los dos objetivos y ha copiado los recursos al directorio bin. Observars que ant no imprime nada sobre el objetivo compile. Ant ha observado que no se ha modificado ningn fichero fuente y no los compila de nuevo. Lo mismo suceder con copy-resources - ant no copiar de nuevo los ficheros a menos que hayan cambiado, o que los hayamos eliminado del directorio bin.

.Utilizar Propiedades

Ahora ya tenemos un bonito fichero de contruccin en un lugar. Pero no podramos sacarlo de aqu. Sin embargo habrs observado que nuestros nombres de directorios se han esparcido por todo el fichero. Si alguna vez tuvieramos que cambiarlos, deberamos hacerlo por todo el fichero de construccin. Resolveremos este problema utilizando declaraciones de propiedades ant:

<project name="hibernate-tutorial" default="compile">

    <property name="sourcedir" value="${basedir}/src"/>
    <property name="targetdir" value="${basedir}/bin"/>
    <property name="librarydir" value="${basedir}/lib"/>

    <target name="compile" depends="copy-resources">
      <javac srcdir="${sourcedir}"
             destdir="${targetdir}"
             debug="on"
      >
      
          <classpath>
              <fileset dir="${librarydir}">
                  <include name="*.jar"/>
              </fileset>
          </classpath>        
      </javac>
    </target>
    
    <target name="copy-resources">
        <copy todir="${targetdir}">
        <fileset dir="${sourcedir}">
            <exclude name="**/*.java"/>
        </fileset>
    </copy>
    </target>

</project>

Podemos definir nuestras propiedades utilizando la etiqueta property, y podemos insertarlas en cualquier lugar del fichero utilizando el mismo nombre que declaramos para la propiedad pero rodendolo con ${}.

Observa la propiedad ${basedir} que utilizamos en las declaraciones de propiedades -- esta es una propiedad definida por ant, que contiene el path del directorio desde el que se ha ejecutado ant.

COMPARTE ESTE ARTÍCULO

ENVIAR A UN AMIGO
COMPARTIR EN FACEBOOK
COMPARTIR EN TWITTER
COMPARTIR EN GOOGLE +
¡SÉ EL PRIMERO EN COMENTAR!
Conéctate o Regístrate para dejar tu comentario.