Introducción a Apache Ant Juan V. Carrillo Simón CFGS DAM. Entornos de Desarrollo Apache Ant http://ant.apache.org/ ● "Another Neat Tool" en español "Otra Ingeniosa Herramienta" ● Herramienta para realización de tareas de compilación y construcción (build) ● Fichero de configuración en xml ○ Por defecto build.xml ● Proyectos similares: Maven Estructura de directorios Estructura de directorios ● ● ● ● ● src: Código fuente dist: Paquetes de distribución build: Código compilado docs: Documentación build.xml: configuración de ant XML: eXtensible Markup Language ● Lenguaje de marcas extensible ● Define una serie de etiquetas ● Toda etiqueta de apertura debe tener su etiqueta de cierre <etiquetauno></etiquetauno> ó <etiquetauno /> ● Las etiquetas pueden tener contenido <etiquetados>Contenido</etiquetados> XML: etiquetas y atributos ● Las etiquetas pueden anidarse <etiquetauno> <etiquetados>Algo</etiquetados> <etiquetados>Algo más</etiquetados> </etiquetauno> ● Las etiquetas pueden tener atributos <etiquetauno atributo=”valor”> XML: Comentarios ● Comentarios en XML <!-- Setting properties --> ● Cabecera de un documento <?xml version="1.0"?> Ejemplo completo de XML <?xml version="1.0"?> <project name="test" default="all" basedir="."> <!-- Setting properties --> <property name="build.dir" location="build/classes" /> <property name="dist.dir" location="dist" /> <property name="docs.dir" location="docs" /> <!-- Deletes the existing build, docs and dist --> <target name="clean"> <delete dir="${build.dir}" ></delete> <delete dir="${docs.dir}" ></delete> <delete dir="${dist.dir}" ></delete> </target> </project> ANT: build.xml ● Los ficheros buildfiles de ANT están escritos en XML. ● Cada buildfile contiene un proyecto (project) y al menos un objetivo (target). ● Cada objetivo puede contener varias tareas (task) que son fragmentos de código a ejecutar. ● Un proyecto, además, puede constar de diversas propiedades. Project y Target ● El proyecto es la raíz, target los objetivos ● Definiremos un target para cada tarea. ● No hay un nombre estándar, pero se suelen usar los siguientes: ○ ○ ○ ○ ○ ○ ○ build: compilar clean: eliminar compilados init: crear los directorios necesarios run: ejecutar doc: generar documentación all: limpiar y compilar dist / jar: ficheros de distribución Propiedades ● Cada propiedad consta de nombre y valor y son usadas para asignar valores a los atributos de los task. ○ Definición <property name="build.dir" location="build/classes" /> ○ Uso: <delete dir="${build.dir}" ></delete> Empezando con ANT: build.xml ● Creamos el fichero build.xml añadiendo la cabecera. ● Es conveniente escribir ya la etiqueta de cierre del proyecto, para no olvidarla ● Etiqueta “default” define el target que se ejecuta por defecto <?xml version="1.0"?> <project name="miproyecto" default="all" basedir="."> <!-- Setting properties --> <property name="build.dir" location="build/classes" /> <property name="dist.dir" location="dist" /> <property name="src.dir" location="src" /> </project> build.xml: init target ● Añadimos la tarea inicial ○ Utiliza el comando mkdir (crea directorio) ... <target name="init"> <mkdir dir="${dist.dir}" ></mkdir> <mkdir dir="${build.dir}" ></mkdir> <!-- src ya está creado --> </target> ... build.xml: build target ● Añadimos la tarea de compilación ○ Primero se ejecuta “init”: atributo depends <target name="build" depends="init"> <javac srcdir="${src.dir}" destdir="${build.dir}"/> </target> build.xml: dist target ● Definimos la tarea para crear el jar ● Hay que definir la clase principal (punto de entrada) en el fichero manifest <target name="dist" depends="init, build"> <jar destfile="${dist.dir}/HelloWorld.jar" basedir="${build.dir}" <manifest> <attribute name="Main-Class" value="dam.HelloWorld" /> </manifest> </jar> build.xml: clean target ● Tarea para eliminar compilado ○ Utiliza el comando delete <target name="clean"> <delete dir="${build.dir}"/> <delete dir="${dist.dir}"/> </target> build.xml: run target ● Tarea para ejecutar: utiliza el comando java <property name="main-class" value="dam.HelloWorld"/> ... <target name="run"> <java jar="${build.dir}/${ant.project.name}.jar" fork="true"/> </target> build.xml: all target ● Tarea principal (definida para ser la tarea por defecto) ● Realiza la compilación y el jar ● No necesariamente tiene que ser la tarea por defecto <target name="all" depends="build, dist"> <description>Main target</description> </target> build.xml: librerías ● Es necesario añadir las librerías para compilar <!-- Create classpath container which can be later used -> <path id="build.classpath"> <fileset dir="${lib.dir}"> <include name="**/*.jar" /> </fileset> </path> <!-- Compiles the java code --> <target name="build" depends="clean, init"> <javac srcdir="${src.dir}" destdir="${build.dir}" classpathref="build.classpath" /> build.xml: librerías ● También hay que añadirlas al ejecutar <target name="run" depends="dist"> <java fork="true" classname="${main-class}"> <classpath> <path refid="classpath"/> <path location="${dist.dir}/${ant.project.name}.jar"/> </classpath> </java> </target> Ejecutar Ant Referencias ● Tutorial: Hello Word with Ant. http://ant. apache.org/manual/tutorialHelloWorldWithAnt.html ● Apache Ant Tutorial. http://www.vogella. com/articles/ApacheAnt/article.html ● Apache Ant Manual. http://ant.apache. org/manual/