To avoid runtime loading errors, make sure the Adobe-signed Flex 4 RSL dependencies are listed first in your pom.xml
file. You should match the order of the Adobe framework RSLs defined in sdks/4.1.0/frameworks/flex-config.xml
by the order of the <runtime-shared-library-path>
elements.
The RSL runtime loading sequence matches the Flex compiler SWC linking sequence. The flex-mojos plugin relies on Maven for dependency resolution and sequencing. Maven sequences the dependencies using the order specified in the dependencies section. Maven will use the first matching dependency encountered in the case of duplicates/conflicts.
Below is an example pom.xml
snippet. Note the unique version number for the textLayout RSL.
<packaging>swf</packaging> <build> <plugins> <plugin> <groupId>org.sonatype.flexmojos</groupId> <artifactId>flexmojos-maven-plugin</artifactId> <extensions>true</extensions> <configuration> <!-- Use Adobe-signed framework Runtime Shared Libraries (RSLs). --> <policyFileUrls> <url>http://fpdownload.adobe.com/pub/swz/crossdomain.xml</url> <url>http://fpdownload.adobe.com/pub/swz/crossdomain.xml</url> </policyFileUrls> <rslUrls> <url>http://fpdownload.adobe.com/pub/{extension}/flex/${flex.sdk.version}/{artifactId}_{version}.{extension}</url> <!-- TextLayout will not be retrieved from previous url so we have to add a failover url --> <url>http://fpdownload.adobe.com/pub/{extension}/tlf/${flex.sdk.textLayout.version}/{artifactId}_${flex.sdk.textLayout.version}.{extension}</url> </rslUrls> </configuration> </plugin> </plugins> </build> <dependencies> <!-- Dynamically load the Adobe signed RSL framework instead of merging into SWF. --> <dependency> <groupId>com.adobe.flex.framework</groupId> <artifactId>textLayout</artifactId> <version>${flex.sdk.version}</version> <type>swc</type> <scope>caching</scope> </dependency> <!-- OSMF SWC would go here. --> <dependency> <groupId>com.adobe.flex.framework</groupId> <artifactId>framework</artifactId> <version>${flex.sdk.version}</version> <type>swc</type> <scope>caching</scope> </dependency> <dependency> <groupId>com.adobe.flex.framework</groupId> <artifactId>spark</artifactId> <version>${flex.sdk.version}</version> <type>swc</type> <scope>caching</scope> </dependency> <dependency> <groupId>com.adobe.flex.framework</groupId> <artifactId>sparkskins</artifactId> <version>${flex.sdk.version}</version> <type>swc</type> <scope>caching</scope> </dependency> <dependency> <groupId>com.adobe.flex.framework</groupId> <artifactId>rpc</artifactId> <version>${flex.sdk.version}</version> <type>swc</type> <scope>caching</scope> </dependency> <dependency> <groupId>com.adobe.flex.framework</groupId> <artifactId>datavisualization</artifactId> <version>${flex.sdk.version}</version> <type>swc</type> <scope>caching</scope> </dependency> <!-- Flex framework resource bundles --> <dependency> <groupId>com.adobe.flex.framework</groupId> <artifactId>flex-framework</artifactId> <version>${flex.sdk.version}</version> <type>pom</type> </dependency> </dependencies>
The TextLayout SWZ is not hosted by Adobe on the same URL template. This is the reason why we have to define a second failover URL in the <rslUrls>
element. For example, you will have to declare the following properties to use the configuration above with Flex 4.5.1:
<flex.sdk.version>4.5.1.21328</flex.sdk.version> <flex.sdk.textLayout.version>2.0.0.232</flex.sdk.textLayout.version>
Note on the usage of signed RSLs and Apache Flex SDK:
Given that Adobe is the single entity which can sign RSL and produces SWZ files, Apache Flex will not be allowed to deploy signed stuff. So it seems that we'll not be able to benefit from the Flash Player cache.