<?xml version="1.0"?>
<project name="mi-proyecto" default="compile" basedir=".">
	<description>Plantilla de Ant para proyectos sencillos</description>
	
	<!-- Propiedades relativas a la ejecución de la aplicación -->
	<property name="application.main" value="org.example.miproyecto.Inicio" />
	<property name="application.args" value="arg1 arg2 arg3" />
	
	<!-- Activa o desactiva la generación de símbolos de depuración -->
	<property name="build.debug" value="on" />
	<!-- <property name="build.debug" value="off" /> -->
	
	<!-- Propiedades para referirse a los directorios -->
	<property name="build.dir" location="build" />
	<property name="build.prod.dir" location="${build.dir}/prod" />
	<property name="build.test.dir" location="${build.dir}/test" />
	<property name="src.dir" location="src" />
	<property name="test.dir" location="test" />
	<property name="test.reports.dir" location="${test.dir}/reports" />
	<property name="test.results.dir" location="${test.dir}/results" />
	<property name="lib.dir" location="lib" />
	<property name="dist.dir" location="dist" />
	
	<!-- Propiedades relativas al empaquetado del proyecto -->
	<tstamp/>
	<property name="project.name" value="${ant.project.name}" />
	<property name="project.version" value="${DSTAMP}" />
	<property name="jarfile.name"
		value="${project.name}-${project.version}.jar" />
	<property name="jarfile.path" location="${dist.dir}/${jarfile.name}" />
	
	<!-- CLASSPATH del proyecto (directorios de clases del proyecto y los
	     archivos jar del directorio de bibliotecas) -->
	<path id="project.classpath">
		<pathelement location="${build.prod.dir}" />
		<pathelement location="${build.test.dir}" />
		<fileset dir="${lib.dir}">
			<include name="*.jar" />
		</fileset>
	</path>
	
	<!-- Crea los directorios donde se crearan los nuevos archivos -->
	<target name="init">
		<mkdir dir="${build.dir}" />
		<mkdir dir="${build.prod.dir}" />
		<mkdir dir="${dist.dir}" />
	</target>
	
	<target name="compile" depends="init"
		description="Compila el código fuente de la aplicación">
		<javac srcdir="${src.dir}"
			destdir="${build.prod.dir}"
			debug="${build.debug}"
			target="1.4"
			source="1.4">
			<classpath refid="project.classpath" />
		</javac>
	</target>
	
	<target name="dist" depends="compile"
		description="Crear un archivo Jar para distribuir la aplicación">
		<jar destfile="${jarfile.path}"
			basedir="${build.prod.dir}" />
	</target>
	
	<target name="execute" depends="compile"
		description="Ejecuta nuestra aplicación">
		<java classname="${application.main}">
			<classpath refid="project.classpath" />
			<arg line="${application.args}" />
		</java>
	</target>
	
	<!-- Borra los resultados antiguos y crea los nuevos directorios -->
	<target name="init-tests">
		<mkdir dir="${build.test.dir}" />
		<delete dir="${test.results.dir}" />
		<delete dir="${test.reports.dir}" />
		
		<mkdir dir="${test.results.dir}" />
		<mkdir dir="${test.reports.dir}" />
	</target>
	
	<target name="compile-tests" depends="compile, init-tests"
		description="Compila el código fuente de las pruebas">
		<javac srcdir="${test.dir}"
			destdir="${build.test.dir}"
			debug="${build.debug}"
			target="1.4"
			source="1.4">
			<classpath refid="project.classpath" />
		</javac>
	</target>
	
	<target name="test" depends="compile-tests"
		description="Realiza las pruebas de jUnit a nuestra aplicación">
		<junit haltonfailure="true">
			<classpath refid="project.classpath" />
			<formatter type="brief" usefile="false" />
			<formatter type="xml" />
			<batchtest todir="${test.results.dir}">
				<fileset dir="${build.test.dir}"
					includes="**/*Test.class" />
			</batchtest>
		</junit>
		
		<!-- Generamos un informe -->
		<junitreport todir="${test.results.dir}">
			<fileset dir="${test.results.dir}">
				<include name="TEST-*.xml" />
			</fileset>
			<report format="noframes" todir="${test.reports.dir}" />
		</junitreport>
	</target>
	
	<target name="clean"
		description="Elimina los directorios creados">
		<delete dir="${build.dir}" />
		<delete dir="${dist.dir}" />
	</target>
</project>
