Compilando con Ant Contenido

Anuncio
Compilando con Ant
DSI 2007/08
Compilando con Ant
Introducción
Compilando con Ant
DSI 2007/08
Contenido
Contenido
Introducción
Funcionamiento
elemental
Ejemplo
Diseño de Sistemas Informáticos 2007/08
Contenido
Otras tareas Ant
Introducción
1
Introducción
2
Funcionamiento elemental
Funcionamiento
elemental
Bibliografı́a
Ejemplo
Otras tareas Ant
Bibliografı́a
3
Ejemplo
4
Otras tareas Ant
5
Bibliografı́a
MADS Group - Departamento de Computación
Marzo de 2008
DSI 2007/08 (UDC)
Compilando con Ant
¿Qué es Ant?
Marzo de 2008
Compilando con Ant
DSI 2007/08
Herramienta tipo make
DSI 2007/08 (UDC)
1 / 16
Ant vs. Make
Proyecto código abierto (open source)
Apache Software Foundation
http://ant.apache.org
Originalmente herramienta de apoyo para la
compilación multiplataforma de Jakarta Tomcat
(contenedor de servlets)
Funcionamiento
elemental
Ejemplo
+ Los targets se describen en XML
+ Configuración no basada en formatos estrictos
(tabuladores)
Bibliografı́a
Proyectos, targets y tareas
Cada proyecto tiene asociado un build file
build.xml (por defecto)
<project>
Cada build file lo componen un conjunto de targets
Corresponden a actividades comunes
Compilación
Generación de documentación
Ejecución de casos de prueba
...
⇒ Javadoc, generación de JAR/WAR. . .
Marzo de 2008
3 / 16
Compilando con Ant
DSI 2007/08
DSI 2007/08 (UDC)
Funcionamiento
elemental
Ejemplo
DSI 2007/08 (UDC)
Compilando con Ant
DSI 2007/08
Cada target se ejecuta como máximo una vez
Otras tareas Ant
Por ejemplo, si los targets test y deploy dependen
del target compile, y si a su vez el target all
depende de los targets test y desploy, la ejecución
del target all solo conlleva una ejecución del target
compile
Bibliografı́a
4 / 16
Contenido
build.xml en directorio actual (-builfile file)
Se pueden especificar uno o más targets a ejecutar
Ej.: ant -buildfile dsi.xml clean compile
Introducción
Marzo de 2008
Compilando con Ant
Comando ant
Introducción
Funcionamiento
elemental
Ejemplo
Otras tareas Ant
Bibliografı́a
Algunos tareas sólo se ejecutan cuando es necesario
Por ejemplo, los archivos que no han cambiado
desde la última vez que fueron compilados, no se
recompilan
Marzo de 2008
5 / 16
DSI 2007/08 (UDC)
Compilando con Ant
Ejemplo (II)
Contenido
Compilando con Ant
3 <!-- ====
Ejemplo
Otras tareas Ant
Bibliografı́a
4
6 / 16
DSI 2007/08
Contenido
Introducción
1 <?xml version="1.0"?>
2 <project default="compile" basedir=".">
Funcionamiento
elemental
Marzo de 2008
Compilando con Ant
build.xml (I)
Introducción


build.xml





ant.properties





n




src *.java



n
/home/carlos/DSI/P2P/

lib *.jar





n






classes *.class





build

n





javadoc *.html
Compilando con Ant
Ejecución
Contenido
DSI 2007/08
Estructura de directorios tı́pica,
Bibliografı́a
+ Extensible con Java (org.apache.tools.ant.*)
+ Integrado en los IDE’s más comunes
Se ejecutan secuencialmente cuando el target
asociado es activado
<javac>, <copy>, <delete>, <mkdir>
<javadoc>. . .
Ejemplo (I)
Otras tareas Ant
⇒ Más rápido
Cada target lo componen por un conjunto de tareas
Compilando con Ant
Ejemplo
+ Mejor integración con las tareas propias de Java
Los targets pueden tener dependencias entre sı́
<target>
DSI 2007/08 (UDC)
Funcionamiento
elemental
+ Todo el proceso corre dentro de la misma JVM
Shell-scripts & Makefiles ⇒ Problemas portabilidad
Maven ⇒ Evolución de Ant
Compilando con Ant
Introducción
Ant se adecua mejor al mundo Java
Estandar del mundo Java
Alternativas,
DSI 2007/08 (UDC)
Contenido
Ant es menos crı́ptico
Otras tareas Ant
2 / 16
DSI 2007/08
+ Implementado en Java
+ Requiere una JVM mı́nima (≥ 1.1)
+ No depende de comandos especı́ficos del SO
Introducción
Marzo de 2008
Compilando con Ant
Ant es más portable
Contenido
⇒ Automatización de tareas en la fase de desarrollo de
un proyecto (compilación, documentación,
pruebas. . . )
Compilando con Ant
Funcionamiento
elemental
Properties ==== -->
Ejemplo
<property file="$basedir/ant.properties"/>
Otras tareas Ant
Bibliografı́a
Etiqueta <project>
Estructura general del proyecto
default: target por defecto
basedir: directorio base
⇒ $basedir
Etiqueta <property>
Todo proyecto define un conjunto de propiedades
⇒ file: fichero externo de propiedades
⇒ name / value
Marzo de 2008
7 / 16
DSI 2007/08 (UDC)
Compilando con Ant
Marzo de 2008
8 / 16
Ejemplo (III)
Compilando con Ant
DSI 2007/08
ant.properties
1
2
3
4
5
6
7
8
9
10
Contenido
Ejemplo
<property
<property
<property
<property
<property
<property
<property
Contenido
Introducción
Otras tareas Ant
Bibliografı́a
13
<target name="init">
14
<echo>
15 ---------------------------------------------------------16 Building "$project.name v$project.version" ...
17 ---------------------------------------------------------18
</echo>
19
</target>
Funcionamiento
elemental
Ejemplo
Otras tareas Ant
Bibliografı́a
Etiqueta <target>
build.xml (II)
5
6
7
8
9
10
11
DSI 2007/08
12 <!-- ==== "init" target ==== -->
Funcionamiento
elemental
## Java compiler
javac.debug=on
javac.optimize=off
javac.deprecation=off
Compilando con Ant
build.xml (III)
Introducción
## Global project properties
project.name=Almacenamiento P2P
project.version=0.1
project.author=DSI0708
project.backupextension=.backup
Ejemplo (IV)
name: nombre del target
name="p2p.home" value="$basedir"/>
name="p2p.lib" value="$p2p.home/lib"/>
name="p2p.src" value="$p2p.home/src"/>
name="p2p.build" value="$p2p.home/build"/>
name="p2p.classes" value="$p2p.build/classes"/>
name="p2p.classpath" value="$p2p.classes:$p2p.lib/p2p.jar"/>
name="p2p.javadoc" value="$p2p.build/javadoc"/>
Tarea <echo>
Envio de mensajes a System.out (o fichero)
Ejemplos de acceso a propiedades del proyecto
Ejemplos de acceso a propiedades del proyecto
DSI 2007/08 (UDC)
Compilando con Ant
Ejemplo (V)
9 / 16
Compilando con Ant
DSI 2007/08
Contenido
build.xml (IV)
<target name="compile" depends="init">
<mkdir dir="$p2p.classes"/>
<mkdir dir="$p2p.classes/dsi"/>
<mkdir dir="$p2p.classes/dsi/p2p"/>
<mkdir dir="$p2p.classes/dsi/p2p/test"/>
<copy todir="$p2p.classes/dsi/p2p/test">
<fileset dir="$p2p.src/dsi/p2p/test">
<include name="**/*.jpg"/>
</fileset>
</copy>
<javac srcdir="$p2p.src" destdir="$p2p.classes"
source="1.4" target="1.4" encoding="UTF-8"
classpath="$p2p.classpath"
debug="$javac.debug" optimize="$javac.optimize"
deprecation="$javac.deprecation"/>
</target>
DSI 2007/08 (UDC)
Compilando con Ant
Ejemplo (VI)
Funcionamiento
elemental
Ejemplo
Otras tareas Ant
Bibliografı́a
10 / 16
DSI 2007/08
Contenido
37 <!-- ==== "cleanclasses" target ==== -->
38
39
40
41
42
43
44
45
Marzo de 2008
Compilando con Ant
build.xml (V)
Introducción
20 <!-- ==== "compile" target ==== -->
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
Marzo de 2008
<target name="cleanclasses" depends="init">
<delete dir="$p2p.classes"/>
<delete verbose="true">
<fileset dir="$p2p.src" defaultexcludes="false">
<include name="**/*.class"/>
</fileset>
</delete>
</target>
Introducción
Funcionamiento
elemental
Ejemplo
Otras tareas Ant
Bibliografı́a
46 <!-- ==== "cleanbackups" target ==== -->
47
48
49
50
51
52
53
Ejemplo de dependencia
<target name="cleanbackups" depends="init">
<delete verbose="true">
<fileset dir="$p2p.home" defaultexcludes="false">
<include name="**/*~"/>
</fileset>
</delete>
</target>
Tarea <delete>
Ejecución secuencial de tareas
Tareas <mkdir>, <copy> y <javac>
DSI 2007/08 (UDC)
Compilando con Ant
Ejemplo (VII)
DSI 2007/08
Contenido
<target name="clean" depends="init, cleanbackups, cleanclasses">
<delete dir="$p2p.build"/>
</target>
Funcionamiento
elemental
Ejemplo
Otras tareas Ant
58 <!-- ==== "rebuild" target ==== -->
<target name="rebuild" depends="init, clean, compile" />
DSI 2007/08 (UDC)
Compilando con Ant
Ejemplo (y VIII)
Bibliografı́a
Ejemplo de dependencia múltiple
12 / 16
DSI 2007/08
Contenido
Introducción
60 <!-- ==== "javadoc" target ==== -->
61
62
63
64
65
66
67
68
69
70
Marzo de 2008
Compilando con Ant
build.xml (VII)
Introducción
54 <!-- ==== "clean" target ==== -->
59
11 / 16
Compilando con Ant
build.xml (VI)
55
56
57
Marzo de 2008
<target name="javadoc" depends="compile">
<delete dir="$p2p.javadoc"/>
<mkdir dir="$p2p.javadoc"/>
<javadoc packagenames="dsi.p2p.*"
sourcepath="$p2p.src" classpath="$p2p.classpath"
destdir="$p2p.javadoc" private="yes" windowtitle="$project.name"
doctitle="$project.name v$project.version"
header="$project.name v$project.version"
bottom="$project.name v$project.version - $project.author"/>
</target>
Funcionamiento
elemental
Ejemplo
Otras tareas Ant
Bibliografı́a
71 <!-- ==== "all" target ==== -->
72
<target name="all" depends="rebuild, javadoc"/>
73 </project>
Tarea <javadoc>
DSI 2007/08 (UDC)
Compilando con Ant
Otras tareas Ant
<chmod>: manejo de
permisos
<svn>: acceso
repositorios SVN
<exec>: ejecución
comandos SO
<get>: descargas vı́a
HTTP
<gzip>: creación
archivos .gz
<zip>: creación
archivos .zip
<mail>: envı́o e-mails
vı́a SMTP
DSI 2007/08 (UDC)
Marzo de 2008
13 / 16
Compilando con Ant
DSI 2007/08
<patch>: parcheado de
archivos
<sql>: acesso a BDs
<jar>: creación
archivos .jar
DSI 2007/08 (UDC)
Compilando con Ant
Bibliografı́a
Introducción
14 / 16
Compilando con Ant
DSI 2007/08
[ant08] Apache Ant Homepage.
http://ant.apache.org, 2008.
Contenido
Marzo de 2008
Contenido
Introducción
Funcionamiento
elemental
Funcionamiento
elemental
Ejemplo
Ejemplo
Otras tareas Ant
Otras tareas Ant
Bibliografı́a
Bibliografı́a
<signjar>: firma
archivos .jar
<junit>: ejecución
tests JUnit
<ftp>: accesso servicio
FTP
...
Compilando con Ant
Marzo de 2008
15 / 16
DSI 2007/08 (UDC)
Compilando con Ant
Marzo de 2008
16 / 16
Descargar