Compilación y enlazado con Modules
En este artículo voy a definir muy brevemente los pasos que se deben seguir para compilar correctamente las distintas partes de una aplicación basada en Modules teniendo en cuenta los tipos de enlaces entre las distintas partes (Modules, Shell y RSL).
Lo haré tomando como ejemplo la aplicación que Xavi preparó para su charla en la última reunión MIFO II acerca de Arquitecturas modulares
Creación del proyecto
Descargamos el ejemplo ( enlaces a la descarga del proyecto, slides y presentación en diferido aquí ).
Una vez descargado lo primero que haremos es descomprimir el zip. Nos quedará la carpeta archivo-comprimido. La copiamos donde queramos definir el proyecto y a continuación vamos a Flex Builder File->Import->Existing Projects into Workspace, Next, Select root directory y vamos a buscar la carpeta archivo-comprimido (o como la hayamos llamado). Al seleccionarla nos aparecerán todos los proyectos del ejemplo:
- AMFGateway
- commons
- SampleApplication
- SOAPGateway
Finalizamos y ya tenemos los proyectos en FlexBuilder.
Del código no tenemos que tocar nada, lo único que vamos a revisar son los parámetros de configuración de cada uno de los proyectos para entender el mecanismo de enlazado entre ellos.
RSL
El proyecto de librería commons, que es lo que utilizaremos a modo de RSL, no debe compilar nada más que las interfaces y clases que tiene definidas, todos los swc que tiene enlazados no son necesarios, solo ocupan espacio y aumentan el peso final de la aplcación.
Para eliminar las dependencias con los swc del framework de Flex seguiremos estos pasos: Seleccionamos el proyecto commons y vamos a Project->properties->Flex library Build path->Library Path, ahí desplegamos todos los nodos correspondentes a los diferentes archivos swc del framework de Flex: playerglobal.swc, utilities.swc, flex.swc, framework.swc, rpc.swc y charts.swc si los tenemos (dejamos igual el nodo locale) y uno a uno le asignamos Link Type: External. De esta forma la RSL no compilará en su swc todas estas clases y reducirá el peso considerablemente.
Shell
Nuestra Shell (aplicación principal) es SampleApplication. En relación a la compilación, la Shell debe tener en cuenta lo siguiente:
- Debe cargar la RSL generada en el proyecto de librería commons
- Debe generar un informe donde aparezcan todas las clases que utiliza para que después podamos evitar que los módulos también las compilen
cargar la RSL
Para definir que nuestra Shell cargue la RSL commons haremos lo siguiente:
Seleccionamos el proyecto SampleApplication, Project->properties->Flex Build Path->Library Path y ahí debemos tener un nodo commons. Si no lo tenemos Add swc->Browse y vamos a buscar el archivo commons.swc en la carpeta commons/bin del proyecto commons.
Si desplegamos el nodo commons, seleccionamos RSL URL y editamos con el botón Edit, deberemos tener Link Type: RSL seleccionado, Auto extract swf to RSL URL marcado, y en el campo RSL URL tendremos commons.swf.
Generar el link report
Para generar el informe de clases utilizadas (link report), siguiendo en las propiedades de proyecto vamos a Flex Compiler, ahí añadimos el flag -link-report=C:\report.xml en el campo de Additional compiler arguments. He puesto la ruta absoluta porque en la versión actual de Flex Builder (la 2.0.1) hay un bug que no permite pasar como argumento a este flag una ruta relativa (ver las release notes, el punto Incorrect location for link report).
Además de esto también es interesante enlazar nuestra aplicación Shell a todos sus proyectos relacionados para que se compilen a la vez cuando se haga un cambio en cualquiera de ellos. Para hacerlo vamos a Project References y seleccionamos todos los proyectos relacionados: AMFGateway, commons y SOAPGateway.
Modules
Los proyectos de Modules que tenemos en el ejemplo son: AMFGateway y SOAPGateway. En los dos proyectos (o en tantos módulos como tuviéramos) realizaremos los mismos pasos:
- Definir cuales son las clases que no necesitamos compilar en el swf del módulo (las que ya tenemos compiladas en nuestra shell)
- Enlazar la RSL del proyecto commons
- Definir el output folder para que el swf del módulo se compile en el proyecto de la shell
Compilación de módulos
Lo primero que haremos es copiar el archivo de link report que se creó en C:\report.xml al definir el flag de compilación en la Shell y pegarlo en la raíz del módulo. A continuación abrimos las propiedades de proyecto Project->properties->Flex compiler->Additional compiler arguments y en el campo de Additional compiler arguments añadimos el flag -load-externs=report.xml. Esto le dirá al compilador que no se carguen las clases especificadas en dicho archivo reduciendo el peso del módulo en unos 130Kb aprox.
Enlazar la RSL
Ahora falta enlazar la librería compilada del proyecto commons como RSL en el proyecto Shell.
Vamos a Flex Build Path->Library Path y añadimos (si no está ya) el .swc de commons como hemos descrito más arriba. La diferencia es que esta vez el Link Type será External, lo cual significa que el módulo confiará en que la shell ya tiene cargada la RSL y que solo la utilizará en tiempo de diseño para el type checking, code hinting, etc…
Definir output folder para los módulos
Una cosa interesante es configurar las opciones de Output Folder del módulo para que apunten a la carpeta bin del proyecto de la aplicación Shell, así nos despreocupamos de tener que mover manualmente los archivos. Si definimos esta opción es interesante también definir que no se generen los archivos del html wrapper. Esto lo hacemos desde donde estamos pero en el menú Flex Compiler, ahí desmarcamos la opción Generate HTML wraper file.
Estos son todos los pasos a seguir para definir los parámetros de compilación y enlazado de una aplicación basada en Modules. Con ésto y una buena estructura sacaremos el máximo partido a las características del sistema de modularización de Flex.
Acerca de esta entrada
Usted está leyendo “Compilación y enlazado con Modules,” una entrada de MadeInFlex
- Autor: Joan Garnet
Joan es desarrollador de aplicaciones web especializado en la Plataforma Flash y su integración con tecnologías de servidor. Actualmente trabaja desarrollando software en Codeoscopic, empresa de la que es socio fundador.
- URL del Autor:
- http://www.joangarnet.com/
- Publicada:
- 19.05.07 / 9pm
- Categorías:
- Artículos, Flex Builder, Tips, Tutoriales
- Entradas relacionadas:
- Qué viene con Moxie?
- Para leer … “Creating Modular Applications”
- MIFO II: Arquitecturas modulares
- [ArrayElementType] Metadata tag
- Número de visitas:
- 4425
10 Comentarios
Ir al formulario de comentarios | rss (comentarios) [?] | trackback url [?]