Hey Chris.

In converting my company's project over to FM 7.1.0-SNAPSHOT and flex
4.14.1, I had to make some changes regarding how the RSLs were specified in
the pom.  I see that you have a page to address this in the wiki, so thought
I would give a go at writing some of it based off my experience.  Please
look at this and use whatever pieces of it you can.  If there is anything
that I've done incorrectly or made bad assumptions, please let me know as
well.

In order to use RSLs in your flex project, you need to declare their usage
in the dependencies section of your pom, eg:

<dependencies>
    <dependency>
        <groupId>org.apache.flex.framework</groupId>
        <artifactId>framework</artifactId>
        <version>${flex.sdk.version}</version>
        <type>swc</type>
        <scope>rsl</scope>
    </dependency>
</dependencies>

Maven will complain that it doesn't know about the 'rsl' scope type, but you
can safely ignore that warning.  It looks like this:

[WARNING] 'dependencies.dependency.scope' for
org.apache.flex.framework:framework:swc must be one of [provided, compile,
runtime, test, system] but is 'rsl'.

The 'rsl' scope type will instruct the compiler not to compile the RSLs into
the final swf and instead will load the RSLs at runtime.

When Flex moved over from Adobe to Apache, the RSL signing went the way of
the dinosaurs.  Before, the RSLs were loaded as swz files.  These were
Adobe's signed RSLs that lived on their servers and the flashplayer would
load the RSLs from there.  The nice thing about this approach was that you
could visit any website and if you had loaded the RSLs once, it would just
pull them from your cache.  

Now, however, you must host the RSLs on your own server.  The RSLs that are
loaded are now loaded as swf files, and will only be cached for other flex
applications on the same domain.  Because of this limitation, RSLs are a bit
less useful than before.  If you have multiple different flex applications
under the same domain however, it can make sense to load the RSLs at runtime
rather than compiling them into your flex application.

In order to get these RSLs as swfs, you also need to depend on the swf
version of the RSL.

<dependency>
    <groupId>org.apache.flex.framework</groupId>
    <artifactId>framework</artifactId>
    <version>${flex.sdk.version}</version>
    <type>swf</type>
    <scope>test</scope> 
</dependency>

Previous to FM 7.1.0 and Flex 4.14.1 this was all that was needed in the
dependency section.  However, now this will result in build errors like
this:

Error: Unable to resolve resource bundle "components" for locale "en_US".
Error: Unable to resolve resource bundle "textLayout" for locale "en_US".
... etcetera

To resolve these errors, you must also declare the resource bundles for the
RSLs you are using.

<dependency>
    <groupId>org.apache.flex.framework</groupId>
    <artifactId>framework</artifactId>
    <version>${flex.sdk.version}</version>
    <classifier>${language}.rb</classifier>
    <type>swc</type>
    <scope>rsl</scope>
</dependency>

You also need to add an element to the configuration section of the flex
mojos plugin to tell the flex application where it needs to look for the
RSLs.

<plugin>
    <groupId>net.flexmojos.oss</groupId>
    <artifactId>flexmojos-maven-plugin</artifactId>
    <version>${flex.mojo.version}</version>
    <extensions>true</extensions>
    <configuration>
        ...
        <rslUrls>
            <url>rsl/{artifactId}-{version}.{extension}</url>
        </rslUrls>
        ...
    </configuration>
</plugin>

Another helpful configuration parameter you can specify is the
removeUnusedRsls parameter.

<removeUnusedRsls>true</removeUnusedRsls>

Lastly, you also need to copy the RSLs into the directory where you've told
your application to look for them.  This will depend on your project and
deployment structure as to whether you need this or not, but a helpful
plugin to do this automatically is the maven-dependency-plugin.

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-dependency-plugin</artifactId>
    <version>2.8</version>
    <executions>
        
        <execution>
            <id>copy-rsls</id>
            <phase>process-resources</phase>
            <goals>
                <goal>copy-dependencies</goal>
            </goals>
            <configuration>
                <includeGroupIds>${flex.groupId}.framework</includeGroupIds>
                <includeTypes>swf</includeTypes>
                <excludeTransitive>true</excludeTransitive>
                <outputDirectory>${basedir}/target/rsl</outputDirectory>
            </configuration>
        </execution>
    </executions>
</plugin>

Putting this all together, a basic pom would look like this:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0";
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/maven-v4_0_0.xsd";>
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.groupId</groupId>
    <artifactId>artifactId</artifactId>
    <version>1.0.0-SNAPSHOT</version>
    <packaging>swf</packaging>

    <name>My Project</name>

    <properties>
        <flex.mojo.version>7.1.0-SNAPSHOT</flex.mojo.version>
        <flex.sdk.version>4.14.1</flex.sdk.version>
        <flex.groupId>org.apache.flex</flex.groupId>
        <flashplayer.version>18.0</flashplayer.version>
        <flexunit.version>4.3.0-SNAPSHOT</flexunit.version>
        <language>en_US</language>
    </properties>

    <build>
        <sourceDirectory>src/main/flex</sourceDirectory>
        <testSourceDirectory>src/test/flex</testSourceDirectory>
        <plugins>
            <plugin>
                <groupId>net.flexmojos.oss</groupId>
                <artifactId>flexmojos-maven-plugin</artifactId>
                <version>${flex.mojo.version}</version>
                <extensions>true</extensions>
                <configuration>
                    <debug>true</debug>
                    <rslUrls>
                        <url>rsl/{artifactId}-{version}.{extension}</url>
                    </rslUrls>
                    <removeUnusedRsls>true</removeUnusedRsls>
                </configuration>
                <dependencies>
                    <dependency>
                        <groupId>org.apache.flex</groupId>
                        <artifactId>compiler</artifactId>
                        <version>4.14.1</version>
                        <type>pom</type>
                    </dependency>
                   <dependency>
                        <groupId>com.adobe</groupId>
                        <artifactId>fontkit</artifactId>
                        <version>1.0</version>
                    </dependency>
                    <dependency>
                        <groupId>net.flexmojos.oss</groupId>
                       
<artifactId>flexmojos-threadlocaltoolkit-wrapper</artifactId>
                        <version>7.1.0-SNAPSHOT</version>
                    </dependency>
                </dependencies>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-dependency-plugin</artifactId>
                <version>2.8</version>
                <executions>
                    
                    <execution>
                        <id>copy-rsls</id>
                        <phase>process-resources</phase>
                        <goals>
                            <goal>copy-dependencies</goal>
                        </goals>
                        <configuration>
                           
<includeGroupIds>${flex.groupId}.framework</includeGroupIds>
                            <includeTypes>swf</includeTypes>
                            <excludeTransitive>true</excludeTransitive>
                           
<outputDirectory>${basedir}/target/rsl</outputDirectory>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins> 
    </build>

    <dependencies>
       <dependency>
            <groupId>${flex.groupId}</groupId>
            <artifactId>framework</artifactId>
            <version>${flex.sdk.version}</version>
            <type>pom</type>
        </dependency>

        <dependency>
            <groupId>com.adobe.flash.framework</groupId>
            <artifactId>playerglobal</artifactId>
            <version>${flashplayer.version}</version>
            <type>swc</type>
        </dependency>

        <dependency>
            <groupId>${flex.groupId}.flexunit</groupId>
            <artifactId>flexunit-flex</artifactId>
            <version>${flexunit.version}</version>
            <type>swc</type>
            <scope>test</scope>
        </dependency>

        
         <dependency>
            <groupId>org.apache.flex.framework</groupId>
            <artifactId>framework</artifactId>
            <version>${flex.sdk.version}</version>
            <type>swc</type>
            <scope>rsl</scope>
        </dependency>
        <dependency>
            <groupId>org.apache.flex.framework</groupId>
            <artifactId>framework</artifactId>
            <version>${flex.sdk.version}</version>
            <classifier>${language}.rb</classifier>
            <type>swc</type>
            <scope>rsl</scope>
        </dependency>
        <dependency> 
            <groupId>org.apache.flex.framework</groupId>
            <artifactId>framework</artifactId>
            <version>${flex.sdk.version}</version>
            <type>swf</type>
            <scope>test</scope>
        </dependency>
    </dependencies>
</project>



--
View this message in context: 
http://apache-flex-development.2333347.n4.nabble.com/FlexMojos-with-RSLs-tp48944.html
Sent from the Apache Flex Development mailing list archive at Nabble.com.

Reply via email to