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