Está en la página 1de 10

Laboratorio Prácticas

Integración de Sistemas

Ant

Juan Raposo Santiago


Departamento de Tecnoloxías da Información e as Comunicacións
Facultade de Informática
Universidade da Coruña
jrs@udc.es

Ant
„ Herramienta del tipo de make (gnumake, nmake ...)
„ Open Source
„ Proyecto Apache Jakarta (http://jakarta.apache.org/ant)
„ Utilizada en otros desarrollos (ej. Tomcat)
„ Desarrollada en Java.
„ Otras herramientas existentes.
„ Shell-based: Ejecutan comandos específicos del sistema
operativo (no reutilizables en diferentes plataformas).
„ Formatos “estrictos” (ej. tabuladores en Makefiles)
„ Ant en más portable.
„ Las tareas son ejecutadas por clases Java. Solo requiere una
MV Java 1.1 o superior (Reutilizable en diferentes plataformas)
„ Existe una tarea que permite ejecutar comandos basados en el
SO sobre el que se esté utilizando.
„ Utiliza ficheros de configuración XML.

19/10/2002 Tutorial Ant - Integración de Sistemas 2

1
Ejecución
„ Comando ant
„ Por defecto busca el fichero build.xml en el directorio actual.
„ -find busca build.xml en el directorio padre y siguientes
hasta el raíz.
„ -buildfile filename para indicar otro fichero.
„ Se pueden especificar uno o más targets a ejecutar.
„ Por defecto ejecuta el target indicado en el atributo default de
la etiqueta <project>.
„ Ej: ant -buildfile test.xml compile
„ Se pueden establecer propiedades que sobreescriban a las
especificadas en el buildfile.
„ -Dproperty=value
„ Variables de entorno: ant -DMYVAR=$MYVAR ...
„ Otras opciones:
„ -help, -version, -quiet, -verbose, -projecthelp, -listener ...

19/10/2002 Tutorial Ant - Integración de Sistemas 3

Ejecución
„ El script de ant:
„ En Unix lee y evalua ~/.antrc antes de ejcutar ant.
„ En Windows invoca %HOME%\antrc_pre.bat al inicio y
%HOME%\antrc_post.bat al final.
„ Utiliza las siguientes variables de entorno (si fueron
establecidas):
„ JAVACMD: Para utilizar una JVM diferente a
JAVA_HOME/bin/java
„ ANT_OPTS: Argumentos pasados a la JVM en línea de
comandos.

„ Ejecución “manual”:
„ java -Dant.home=c:\ant org.apache.tools.ant.Main [options]
[target]

19/10/2002 Tutorial Ant - Integración de Sistemas 4

2
Buildfiles
„ Escritos en XML.
„ Cada fichero contiene un proyecto.
„ Etiqueta <project>. Atributos:
„ name: El nombre del proyecto.
„ default: Target por defecto (Obligatorio)
„ basedir: Directorio base.
„ Cada proyecto contiene uno o más targets.
„ Targets:
„ Etiqueta <target>. Atributos:
„ name: Nombre del target (obligatorio).
„ depends: Lista de targets de los cuales depende.
„ if / unless: Nombre de una propiedad que debe estar / no estar
establecida para que el target se ejecute.
„ description: Descripción.

19/10/2002 Tutorial Ant - Integración de Sistemas 5

Targets
„ Es posible establecer dependencias entre targets.
„ El atributo depends especifica el orden en el que se ejecutan.
„ No afecta el que un target del que se “depende” no se haya
ejecutado por no ser necesario.
„ Ant trata de ejecutar los targets de los que se depende en el
orden especificado (izquierda a derecha).
„ Puede que un target ya se haya ejecutado si uno anterior
depende de él. Ej:
<target name=“A”/>
<target name=“B” depends=“A”/>
<target name=“C” depends=“B”/>
<target name=“D” depends=“C,B,A”/>

„ Si ejecutamos D el orden de ejecución será: A,B,C,D.


„ Un target se ejecuta solamente una vez, aunque varios
“dependan” de él.
„ Idea: Target de inicialización (“init”) del que dependan los demás.
19/10/2002 Tutorial Ant - Integración de Sistemas 6

3
Tareas
„ Un target se compone de tareas que se ejecutan
secuencialmente cuando se ejecuta el target.
„ <name atribute1=“value1” atribute2=“value2” .../>
„ Los valores de los atributos pueden contener referencias a
propiedades (que se evalúan antes de ejecutar la tarea).
„ Algunos atributos pueden especificarse como elementos anidados.
„ Cada tarea está implementada en una clase Java:
„ Hay un conjunto de tareas incluidas con ant.
„ Otras tareas están incluidas en un .jar opcional.
„ Es posible añadir tareas propias.
„ Todas las tareas comparten tres atributos opcionales:
„ id: Identificador único.
„ name: Nombre particular de la instancia (utilizado en los logs).
„ description: Descripción.
„ Algunas tareas se ejecutan solo cuando es necesario (por
ejemplo ficheros que no han cambiado no se recompilan).
19/10/2002 Tutorial Ant - Integración de Sistemas 7

Algunas tareas
„ Ant: Llama a una target de otro buildfile.
„ Copy: Copia ficheros y directorios.
„ Delete: Borra ficheros y directorios.
„ Echo: Envía un mensaje a System.out o a fichero.
„ GZip: Crea un fichero Gzip.
„ Javac: Compila código fuente Java.
„ Javadoc: Genra ficheros HTML javadoc.
„ Mkdir: Crea un directorio y todos los directorios padre
necesarios.
„ Property: Permite establecer valores de propiedades.
„ Tar: Crea un fichero TAR a partir de un conjunto de
ficheros.
19/10/2002 Tutorial Ant - Integración de Sistemas 8

4
Propiedades
„ Un proyecto puede tener una serie de propiedades.
„ Establecidas en el buildfile a través de la tarea property.
„ <property file=”..."/>
„ <property name=”..." value=”..."/>
„ Establecidas externamente (-Dproperty=value).
„ Pueden usarse en los valores de los atributos de las tareas
con el formato ${propertyname}
„ Ant proporciona acceso a todas las propiedades del sistema
como si se hubiesen definido con <property>.
„ System.getProperties
„ Adicionalmente define las siguientes propiedades:
„ basedir, ant.file, ant.version, ant.project.name, ant.java.version
„ build.sysclasspath controla como afecta el classpath del
sistema al classpath considerado en Ant.
„ only, ignore, last, first

19/10/2002 Tutorial Ant - Integración de Sistemas 9

Ejemplo
<project name="MyProject" default="dist" basedir=".">
<!-- set global properties for this build -->
<property name="src" value="."/>
<property name="build" value="build"/>
<property name="dist" value="dist"/>

<target name="init">
<!-- Create the time stamp -->
<tstamp/>
<!-- Create the build directory structure used by compile -->
<mkdir dir="${build}"/>
</target>

<target name="compile" depends="init">


<!-- Compile the java code from ${src} into ${build} --> ç
<javac srcdir="${src}" destdir="${build}"/>
</target>

19/10/2002 Tutorial Ant - Integración de Sistemas 10

5
Ejemplo (cont)
<target name="dist" depends="compile">
<!-- Create the distribution directory -->
<mkdir dir="${dist}/lib"/>
<!-- Put everything in ${build} into the
MyProject-${DSTAMP}.jar file -->
<jar jarfile="${dist}/lib/MyProject-${DSTAMP}.jar"
basedir="${build}"/>
</target>

<target name="clean">
<!-- Delete the ${build} and ${dist} directory trees -->
<delete dir="${build}"/>
<delete dir="${dist}"/>
</target>
</project>

19/10/2002 Tutorial Ant - Integración de Sistemas 11

Rutas
„ Se pueden utilizar “/” o “\” y como separadores “:” y “;”
„ Ant realiza la conversión dependiendo del sistema operativo.
„ Cuando se necesiten especificar valores de rutas, se pueden
utilizar elementos anidados (nested). Una estructura de rutas
(path-like structure) puede componerse de:
„ Un único fichero o directorio relativo al directorio base.
„ <pathelement location=“...”/>
„ Un cojunto de rutas separadas por “;” o “:”
„ <pathelement path=“...”/>
„ Conjuntos de ficheros definidos en un “FileSet”.
<classpath>
<pathelement path=“${classpath}”/>
<fileset dir=“lib”>
<include name”**/*.jar”>
</fileset>
<pathelement location=“clases”/>
</classpath>

19/10/2002 Tutorial Ant - Integración de Sistemas 12

6
Rutas
„ Una estructura de rutas también puede incluir referencias a
otra estructura a través del elemento <path>.

<path id=“base.path”>
<pathelement path=“${classpath}”/>
...
</path>

<path id=“tests.path”>
<path refid=“base.path”>
<pathelement location=”testclasses”/>
</path>

19/10/2002 Tutorial Ant - Integración de Sistemas 13

Referencias
„ Se puede utilizar el atributo id de los elementos de
un buildfile para referirse a ellos:
„ Útil para no replicar el mismo trozo de XML.
<path id=“project.class.path”>
<pathelement location=“lib”/>
...
</path>

<target ...>
<rmic ...>
<classpath refid=“project.class.path”>
</rmic ...>
</target ...>

<target ...>
<javac ...>
<classpath refid=“project.class.path”>
</javac ...>
</target ...>

19/10/2002 Tutorial Ant - Integración de Sistemas 14

7
Tareas basadas en directorios
„ Algunas tareas actúan sobre árboles de directorios.
„ Por ejemplo javac actúa sobre los ficheros .java de un árbol.
„ En muchas ocasiones es útil seleccionar un subconjunto de
ese árbol de directorios.
„ Formas de crear un subconjunto:
„ Incluyendo los ficheros/directorios que encajen como mínimo
con un patrón de un conjunto de patrones.
„ Excluyendo los ficheros/directorios que encajen como mínimo
con un patrón de un conjunto de patrones.
„ Una combinación de ambos (ficheros/directorios que encajan
con algún patrón de inclusión pero con ninguno de exclusión).
„ Los patrones pueden definirse:
„ Dentro del buildfile (mediante atributos de una tarea o
elementos anidados)
„ Vía ficheros externos (cada línea se interpreta como un patrón)

19/10/2002 Tutorial Ant - Integración de Sistemas 15

Patrones
„ * encaja con 0 o más caracteres
„ ? Encaja con un carácter.
„ Los emparejamientos se hacen por directorio.
„ Cuando se utiliza ** como nombre de un directorio en un
patrón encaja con 0 o más niveles de directorios.
„ /test/** -> Todos los ficheros y directorios bajo /test/
„ Si un patrón acaba en / o \ entonces se le añade **.

„ Por defecto hay una serie de patrones que se


excluyen en todas las tareas basadas en directorios:
**/*~ **/#*# **/.#* **/%*% **/CVS **/CVS/**
**/.cvsignore **/SCCS **/SCCS/** **/vssver.scc

„ defaultexcludes=“no” deshabilita estas exclusiones

19/10/2002 Tutorial Ant - Integración de Sistemas 16

8
PatternSet
„ Etiqueta <patternset>. Conjuntos de patrones.
„ Un patternset puede aparecer
„ anidado dentro de un FileSet o en una tarea basada en
directorios.
„ al mismo nivel que los targets.
„ Pueden ser referenciados por su id.
„ Los patrones que componen un conjunto se definen:
„ como elementos anidados <include> y <exclude>
„ name: Patrón (obligatorio).
„ if: Se usa el patrón si la propiedad nombrada está establecida.
„ unless: Se usa el patrón si la propiedad nombrada no está
establecida.
„ como atributos
„ includes/excludes: lista de patrones separados por comas.
„ includesfile/excludesfile: nombre de fichero con los patrones.
19/10/2002 Tutorial Ant - Integración de Sistemas 17

FileSet
„ Conjunto de ficheros que encajan con los patrones de
una serie de PatternSets.
„ Puede contener elementos anidados <patternset>.
„ Contienen un PatternSet implícito y soportan los elementos
anidados <includes> <excludes> <includesfile>
<excludesfile> directamente, al igual que los atributos de
PatternSet.
„ Etiqueta <fileset>. Atributos:
„ dir: Directorio raíz del conjunto de ficheros
„ defaultexcludes: Utilización de las exclusiones por defecto.
„ casesensitive: Sistema de ficheros sensible a mayúsculas /
minúsculas.
„ includes, excludes, includesfile, excludesfile: idem patternset.
„ Los FileSet Pueden aparecer dentro de tareas que los
soporten o al mismo nivel que los targets.

19/10/2002 Tutorial Ant - Integración de Sistemas 18

9
Ejemplos
<fileset dir="${src}">
<patternset id="non.test.sources">
<include name="std/**/*.java"/>
<include name="prof/**/*.java" if="professional"/>
<exclude name="**/*Test*"/>
</patternset>
</fileset>

Conjunto que contiene a todos los ficheros .java a partir del directorio ${src} que
estén dentro del directorio std o prof (esté último solamente si la propiedad
professional se ha establecido) menos aquellos cuyo nombre contenga “Test”.

<copy todir=“${dist}”>
<fileset dir=“${src}” includes=“**/images/*”
excludes=“**/*.gif”/>
</copy>

Copia todos los ficheros en directorios llamados images situados a partir del
directorio ${src} al directorio ${dist}, menos los que acaben en .gif.

19/10/2002 Tutorial Ant - Integración de Sistemas 19

Referencias
„ Documentación Ant
„ Página Ant: http://jakarta.apache.org/ant

19/10/2002 Tutorial Ant - Integración de Sistemas 20

10