Tutorial de ant

Anuncio
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
„
„
„
„
Desarrollada en Java.
Otras herramientas existentes.
„
„
„
Proyecto Apache Jakarta (http://jakarta.apache.org/ant)
Utilizada en otros desarrollos (ej. Tomcat)
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)
„
„
19/10/2002
Existe una tarea que permite ejecutar comandos basados en el
SO sobre el que se esté utilizando.
Utiliza ficheros de configuración XML.
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”:
„
19/10/2002
java -Dant.home=c:\ant org.apache.tools.ant.Main [options]
[target]
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
<target
<target
<target
„
„
„
name=“A”/>
name=“B” depends=“A”/>
name=“C” depends=“B”/>
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” .../>
„
„
„
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:
„
„
„
„
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.
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.
„
„
„
„
„
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>.
„
„
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.
„
19/10/2002
System.getProperties
Adicionalmente define las siguientes propiedades:
„
„
<property file=”..."/>
<property name=”..." value=”..."/>
only, ignore, last, first
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.
„
„
Un cojunto de rutas separadas por “;” o “:”
„
„
<pathelement location=“...”/>
<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:
**/*~ **/#*#
**/.cvsignore
„
19/10/2002
**/.#* **/%*% **/CVS **/CVS/**
**/SCCS **/SCCS/** **/vssver.scc
defaultexcludes=“no” deshabilita estas exclusiones
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>
„
„
„
„
como atributos
„
„
19/10/2002
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.
includes/excludes: lista de patrones separados por comas.
includesfile/excludesfile: nombre de fichero con los patrones.
Tutorial Ant - Integración de Sistemas
17
FileSet
„
Conjunto de ficheros que encajan con los patrones de
una serie de PatternSets.
„
„
„
Etiqueta <fileset>. Atributos:
„
„
„
„
„
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.
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
„
19/10/2002
Página Ant: http://jakarta.apache.org/ant
Tutorial Ant - Integración de Sistemas
20
10
Descargar