Translate

miércoles, 6 de marzo de 2013

Compilación Flex mxmlc con RSL: El orden de compilación de las RSL importa mucho

Cuando compilas tu aplicación Flex y lo haces con RSL externas para que el SWF generado pese lo menos posible (Opciones de compilación MXMLC static-rsls="false") y el orden de las RSL no es el correcto se produce el siguiente error:







VerifyError: Error #1014: flashx.textLayout.container::TextContainerManager is not found

Este error se produce al acceder con tu navegador a la aplicación, el SWF se descarga pero el error que hemos visto.

Esto se produce porque el orden que estableces en las librerías RSL en la compilación de tu SWF es el orden en que estas se descargarán del servidor.

Por lo tantos si ponemos el orden incorrecto de  las librerías al compilar, al descargar y ejecutarse el swf  de la aplicación se descargarán las librerías .swz en el orden incorrecto y el error de que una librería no se encuentra aparecerá.

El orden correcto lo podemos encontrar en nuestra FLEX SDK (en mi caso 4.6) en el archivo flex-config.xml que está en la ruta:

[FLEX_SDK_4.6_PATH]/frameworks/flex-config.xml

A continuación os pongo el comando de apache ANT que utilizo para compilar para que veáis el orden en que hay que poner las librerías .swz para que luego se descarguen correctamente. Se ve en el apartado de las

<runtime-shared-library....

Variables de ANT:

${APP_ROOT} Es la ruta física de la aplicación.
${DirectorioXmlReport} Directorio donde se crea el XML con la dependencias del proyecto.
${FLEX_HOME} Es la ruta donde está instalado el framework de flex ([FLEX_SDK_4.6_PATH])



--
<mxmlc  file="${APP_ROOT}/MyApp.mxml" keep-generated-actionscript="false" 
     output="${APP_ROOT}/${SwfDestination}/${modulo}.swf"
  actionscript-file-encoding="UTF-8"     
  services="${APP_ROOT}/WEB-INF/flex/services-config.xml"
  context-root="MyApp"    
  link-report="${DirectorioXmlReport}/report.xml"
  static-rsls="false"
        incremental="false" warnings="false" fork="true" maxmemory="512m">
  
 <!-- Compilación para la versión de Flash Player -->
 
 <target-player>11.1.0</target-player>
 
 <!-- Get default compiler options. -->
 <load-config filename="${FLEX_HOME}/frameworks/flex-config.xml"/>

 <!-- List of path elements that form the roots of ActionScript
        class hierarchies. -->
        <source-path path-element="${FLEX_HOME}/frameworks"/>
     
 <!-- List of SWC files or directories that contain SWC files. -->
        <compiler.library-path dir="${APP_ROOT}" append="true">
            <include name="libs" />
      </compiler.library-path>  

<!-- Parámetro para modificar el color de fondo al cargar el preloader de la aplicación-->
 <default-background-color>0x252e39</default-background-color>
 
<!-- Parametro adicional al flex compiler para incluir los .properties-->            
 <include-resource-bundles>resources</include-resource-bundles> 

<!-- Asociación de los RSLs para optimización para separar el Framework de flex de nuestros módulos.-->
     
      
<runtime-shared-library-path path-element="${FLEX_HOME}/frameworks/libs/framework.swc">
   <url rsl-url="framework_4.6.0.23201.swz"/>
   <url policy-file-url=""/>
   <url rsl-url="framework_4.6.0.23201.swf"/>
   <url policy-file-url=""/>
  </runtime-shared-library-path>

<runtime-shared-library-path path-element="${FLEX_HOME}/frameworks/libs/textLayout.swc">
   <url rsl-url="textLayout_2.0.0.232.swz"/>
   <url policy-file-url=""/>
   <url rsl-url="textLayout_2.0.0.232.swf"/>
   <url policy-file-url=""/>
  </runtime-shared-library-path>   
 
<runtime-shared-library-path path-element="${FLEX_HOME}/frameworks/libs/spark.swc">
   <url rsl-url="spark_4.6.0.23201.swz"/>
   <url policy-file-url=""/>
   <url rsl-url="spark_4.6.0.23201.swf"/>
   <url policy-file-url=""/>
  </runtime-shared-library-path>    
 
<runtime-shared-library-path path-element="${FLEX_HOME}/frameworks/libs/sparkskins.swc">
   <url rsl-url="sparkskins_4.6.0.23201.swz"/>
   <url policy-file-url=""/>
   <url rsl-url="sparkskins_4.6.0.23201.swf"/>
   <url policy-file-url=""/>
  </runtime-shared-library-path>    
 
<runtime-shared-library-path path-element="${FLEX_HOME}/frameworks/libs/rpc.swc">
   <url rsl-url="rpc_4.6.0.23201.swz"/>
   <url policy-file-url=""/>
   <url rsl-url="rpc_4.6.0.23201.swf"/>
   <url policy-file-url=""/>
  </runtime-shared-library-path>    

<runtime-shared-library-path path-element="${FLEX_HOME}/frameworks/libs/charts.swc">
   <url rsl-url="charts_4.6.0.23201.swz"/>
   <url policy-file-url=""/>
   <url rsl-url="charts_4.6.0.23201.swf"/>
   <url policy-file-url=""/>
  </runtime-shared-library-path>   

<runtime-shared-library-path path-element="${FLEX_HOME}/frameworks/libs/spark_dmv.swc">
   <url rsl-url="spark_dmv_4.6.0.23201.swz"/>
   <url policy-file-url=""/>
   <url rsl-url="spark_dmv_4.6.0.23201.swf"/>
   <url policy-file-url=""/>
  </runtime-shared-library-path>    
 
<runtime-shared-library-path path-element="${FLEX_HOME}/frameworks/libs/mx/mx.swc">
   <url rsl-url="mx_4.6.0.23201.swz"/>
   <url policy-file-url=""/>
   <url rsl-url="charts_4.6.0.23201.swf"/>
   <url policy-file-url=""/>
  </runtime-shared-library-path>
  
 
<runtime-shared-library-path path-element="${FLEX_HOME}/frameworks/libs/advancedgrids.swc">
   <url rsl-url="advancedgrids_4.6.0.23201.swz"/>
   <url policy-file-url=""/>
   <url rsl-url="advancedgrids_4.6.0.23201.swf"/>
   <url policy-file-url=""/>
  </runtime-shared-library-path>

 
  
  <!--Metadatos adicionales a incluir en el proyecto-->
   
 
   <!-- Metadatos dependientes de Parsley-->
   <keep-as3-metadata name="Metadata" />
   <keep-as3-metadata name="DefaultProperty" />
   <keep-as3-metadata name="Required" />
   <keep-as3-metadata name="Event" />
   <keep-as3-metadata name="AssignableTo" />
   <keep-as3-metadata name="Inject" />
   <keep-as3-metadata name="InjectConstructor" />
   <keep-as3-metadata name="Publish" />
   <keep-as3-metadata name="Subscribe" />
   <keep-as3-metadata name="PublishSubscribe" />
   <keep-as3-metadata name="Factory" />
   <keep-as3-metadata name="Init" />
   <keep-as3-metadata name="Destroy" />
   <keep-as3-metadata name="Observe" />
   <keep-as3-metadata name="AsyncInit" />
   <keep-as3-metadata name="ManagedEvents" />
   <keep-as3-metadata name="MessageDispatcher" />
   <keep-as3-metadata name="MessageHandler" />
   <keep-as3-metadata name="MessageBinding" />
   <keep-as3-metadata name="MessageInterceptor" />
   <keep-as3-metadata name="MessageError" />
   <keep-as3-metadata name="Command" />
   <keep-as3-metadata name="CommandComplete" />
   <keep-as3-metadata name="CommandResult" />
   <keep-as3-metadata name="CommandError" />
   <keep-as3-metadata name="CommandStatus" />
   <keep-as3-metadata name="ResourceBinding" />
   <keep-as3-metadata name="Selector" />
   <keep-as3-metadata name="Target" />
   <keep-as3-metadata name="Autoremove" />
   <keep-as3-metadata name="Internal" />
   <keep-as3-metadata name="ObjectDefinition" />
   <keep-as3-metadata name="DynamicObject" />

  
  <!--Localización -->
 
   <locale>es_ES</locale>
   <!--Necesario para las RSLs del framework flex-->
   <locale>en_US</locale>


  <!-- Necesario para el source path del Flex Build Paht-->
  <compiler.source-path path-element='${APP_ROOT}'/>
  <compiler.source-path path-element='${APP_ROOT}/locale/es_ES'/>
 
  <!-- Optimización-->
  <use-network>true</use-network>
     <debug>false</debug>
     <optimize>true</optimize>
  
</mxmlc>  


--





1 comentario:

  1. The Spring Framework is a lightweight framework for developing Java enterprise applications. It provides high performing, easily testable and reusable code. Spring handles the infrastructure as the underlying framework so that you can focus on your application.Spring is modular in design, thereby making creation, handling and linking of individual components so much easier. Spring implements Model View Container(MVC) design pattern.
    spring mvc validation example

    ResponderEliminar