Programación en castellano
Inicio > Tutoriales > Lenguajes orientados a objeto > J2EE > Persistencia de Objetos Java: El Camino hacia Hibernate
-Tutoriales

Persistencia de Objetos Java: El Camino hacia Hibernate


Construir con Ant

En esta página reemplazaremos el aburrido fichero build.bat con un bonito y pequeño fichero de construcción ant. Necesitarás instalar ant -- puedes obtenerlo de su página de descarga. Aquí no cubriremos como instalar ant. Por favor mirá su manual. Después de haber instalado ant, puedes empezar a crear el fichero de construcción. Se llamará build.xml y lo situarás en el directorio de trabajo en lugar del fichero build.bat (que puedes borrar).

. Un Fichero de Construcción Básico

Un fichero de construcción básico se parece a ésto:


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

    <target name="compile">

    </target>

</project>

Las etiquetas <project> rodean todo el fichero de construcción. 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 ningún 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 construcción utiliando ant en la línea de comandos desde el directorio de trabajo.

Deberías 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 construcción 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 explícito lamandolo con ant compile desde la línea 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 sitúe los ficheros class generados en el directorio bin. Sin embargo si ejecutamos ant ahora, obtendremos un montón de errores de compilación, 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 añada al classpath usado para la compilación. Si ejecutamos ahora ant, deberíamos 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 todavía 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, verás ... 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 debería 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. Observarás que ant no imprime nada sobre el objetivo compile. Ant ha observado que no se ha modificado ningún 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 contrucción en un lugar. Pero no podríamos sacarlo de aquí. Sin embargo habrás observado que nuestros nombres de directorios se han esparcido por todo el fichero. Si alguna vez tuvieramos que cambiarlos, deberíamos hacerlo por todo el fichero de construcción. 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 rodeándolo 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.

 
Patrocinados
 

Copyright © 1999-2007 Programación en castellano. Todos los derechos reservados.
Formulario de Contacto - Datos legales - Publicidad
Mantenida por: Claudio y Dani.

Hospedaje web y servidores dedicados linux por Ferca Network

red internet: jugar gratis | amor | navidad 2009 | registro de dominios | servidores dedicados
más internet: comprar | gratis | posicionamiento en buscadores | decoración libre | gifs animados