Inicio > ANT > Ant para desarrolladores flash – Task copy (parte 3)

Ant para desarrolladores flash – Task copy (parte 3)

jueves, 10 de septiembre de 2009 panaewa Dejar un comentario Ir a comentarios

En esta parte de introducción a ANT voy a utilizar el task copy. Para este ejemplo necesito crear una plantilla de una clase genérica que herede del objeto Sprite de flex, que será la clase principal de la aplicación, sobre esta plantilla y utilizando el task copy se sustituirán algunos patrones por valores que previamente se han asignado a propiedades, también veremos como incluir librerías de tasks desarrollados por terceros o por nosotros mismos, mediante el uso de taskdef, y como copilar la clase creada utilizando los flex ant tasks, y en especial el task mxmlc.

Task copy

El task copy sirve para copiar directorios y ficheros. Este task también nos permite que a la hora de copiar un fichero podamos sustituir patrones predefinidos por propiedades.

En el siguiente ejemplo hemos definido el ancho, el alto, framerate y algunas propiedades más, que queremos que tenga nuestra aplicación, todas ellas las hemos metido en un nuevo fichero de propiedades (proyect.properties), que será especifico para este proyecto y que habrá que importar como ya se hizo con el fichero flex.properties

# Configuración Proyecto
com.dir             = com
domain.dir          = desarrolloflash
project.dir         = examples

namespace        = ${com.dir}.${domain.dir}.${project.dir}
package.dir      = ${src}/${com.dir}/${domain.dir}/${project.dir}

appname      = AntBasic
width        = 800
height       = 600
framerate    = 30
bgcolor      = #FFFFFF

Tambien he creado el directorio templates dentro de la carpeta build que tenía. Y dentro de templates he creado una plantilla, a partir de la cual se creara el main de la aplicación, esta plantilla tiene el nombre Main.tpl y contiene lo siguiente:

package @namespace@
{
	import flash.display.Sprite;

	[SWF(width="@width@", height="@height@",
        frameRate="@framerate@", backgroundColor="@bgcolor@")]
	public class @appname@ extends Sprite
	{
		public function @appname@()
		{
			super();
		}
	}
}

las palabras que están entre @ serán sustituidas por los valores que le asignemos en el task copy.

De forma que nuestro panel de proyectos debe ser algo parecido a esto:

panel de proyectos

panel de proyectos

Ahora sólo falta crear un nuevo target dentro de build.xml, que en mi caso se llama create-main, este target va a contener el task copy, que se va encargar de copiar la plantilla desde la ruta ./templates/Main.tpl a la ruta src . Dentro del paquete que hemos definido en la propiedad package.dir, con el nombre AntBasic.as. Si la ruta no está creada la creará el propio task.

	<target name="main" depends="clean, create-application">
		<echo message="main"/>
	</target>

	<target name="clean">
		<echo message="clean"/>
		<delete dir="${src}"/>
		<delete dir="${lib}"/>
		<delete dir="${bin}"/>
	</target>

	<target name="create-application" depends="create-dirs, create-main">
		<echo message="create-application"/>
	</target>

	<target name="create-main">
		<echo message="create-main"/>
		<copy file="${templates}/Main.tpl" tofile="${package.dir}/${appname}.as">
	        <filterchain>
	           <replacetokens>
				    <token key="namespace" value="${namespace}"/>
				  	<token key="appname"   value="${appname}"/>
				    <token key="width"     value="${width}"/>
				  	<token key="height"    value="${height}"/>
				  	<token key="framerate" value="${framerate}"/>
				  	<token key="bgcolor"   value="${bgcolor}"/>
	           </replacetokens>
	        </filterchain>
		</copy>
	</target>

	<target name="create-dirs">
		<echo message="create-dirs"/>
		<mkdir dir="${src}"/>
		<mkdir dir="${lib}"/>
		<mkdir dir="${bin}"/>
	</target>

Dentro del task copy, aparece el tag filterchain, en nuestro caso únicamente vamos a reemplazar los tokens (palabras rodeadas de @) por los valores de las propiedades que correspondan, así que añadimos el tag replacetoken dentro de filterchain, y tantos tags token como sustituciones vayamos a llevar a cabo. En el tag token, mediante el atributo key definimos que patrón vamos a sustituir y con el atributo value el valor por el cual es sustituido.

Si ejecutamos el target main ahora, veremos que se crea un nuevo fichero llamado AntBasic.as y que contiene lo siguiente:

package com.desarrolloflash.examples
{
	import flash.display.Sprite;

	[SWF(width="800", height="600",
	frameRate="30", backgroundColor="#FFFFFF")]
	public class AntBasic extends Sprite
	{
		public function AntBasic()
		{
			super();
		}
	}

El uso que hemos hecho del task copy y los demas task implicados es muy básico, si se quiere profundizar más en ANT, recomiendo darse una vuelta por el manual, voy poniendo los enlaces a las paginas que creo son oportunas, pero si quieres más ya sabes, a navegar, y veras que es bastante impresionante las posibilidades que tiene.

Task taskdef
Con este task añadimos librerías de tasks, estos task tienen distintas funcionalidades que van desde realizar bucles, hasta lo que queramos ya que podemos crear nuestros propios task, en el siguiente ejemplo voy a incluir los task que proporciona el framework de flex, y que estan incluidas en el sdk que descargamos (mas información).

(es importante definir la propiedad FLEX_HOME ya que si no, no compilará la aplicación)

Ahora vamos a compilar la clase AntBasic.as, lo que nos generará un fichero swf en el directorio bin.
He creado el target compile que será el responsable de realizar esta acción, dentro de este target esta el task mxmlc en el cual definimos los atributos file, que contiene la ruta, incluido el nombre, de nuestra clase AntBasic.as, el atributo output, que contiene la ruta destino del fichero swf, en este ejemplo es ./bin/AntBasic.swf.
También he añadido los tag load-config, para cargar el fichero de configuración de flex, y el tag source-path para definir las rutas donde se encuentran las clases que necesitamos.

        <property name="FLEX_HOME" value="C:/Program Files/Adobe/Flex Builder 3/sdks/3.3.0.4852"/>
	<target name="create-application" depends="create-dirs, create-main, compile">
		<echo message="create-application"/>
	</target>

	<target name="compile">
		<echo message="compile"/>
	        <mxmlc file="${package.dir}/${appname}.as"
                  output="${bin}/${appname}.swf">

                <load-config
                filename="${FLEX_HOME}/frameworks/flex-config.xml"/>
                <source-path path-element="${FLEX_HOME}/frameworks"/>
	    	<source-path path-element="${src}"/>
        </mxmlc>
	</target>

Si ejecutamos de nuevo el target main, veremos que en el directorio bin aparece el archivo esperado, si hacemos doble click sobre el fichero ./bin/AntBasic.swf veremos nuestra primera aplicación.

Categories: ANT Tags: , , , , ,
  1. Sin comentarios aún.
  1. Sin trackbacks aún.