Introduction to building Flex and AIR applications with Maven through the open source Flexmojos plugin.
All source available: https://github.com/justinjmoses/flexmojos-introduction
2. WHAT IS MAVEN?
Automated build & dependency management
Convention over configuration
Repositories - both local and remote - maintain dependencies
Uses a pom.xml file to detail build instructions
Hierarchical tree structures - each artifact can have a parent and N
children.
Runs a series of phases in the project lifecycle, including compile, test,
package and install
3. THE BUILD LIFECYCLE
Builds are made up of phases. Default lifecycle:
Compile
Test
(build test classes and run)
Package
(package as single artifact)
Install
(install artifact locally)
Deploy
(upload artifact to remote repository)
4. WHAT IS FLEXMOJOS?
A Maven plugin that manages the compilation, optimisation and testing
of flex applications, modules and libraries.
Open Source: github.com/Flexmojos/flexmojos
Written and maintained by @velobr
5. REPOSITORIES
Local repository is ~/.m2 (or under Users[You].m2 in Win7)
Settings.xml file depicts machine-level settings - such as remote
repository locations.
6. NEXUS
Nexus is a repository manager
Organisations using Maven typically have their own internal Nexus
instance
Nexus can proxy to other Nexus repositories
Two types of repositories - Snapshot and Release
7. A SIMPLE FLEX
APPLICATION
Minimum requirements:
pom.xml to describe the build
one or more source files
8. LOOKING AT THE POM
<project>
<modelVersion>4.0.0</modelVersion>
<groupId>org.justinjmoses.maven</groupId>
<artifactId>flexmojos-simplist</artifactId>
<name>Simplist Flexmojos</name>
<version>0.1-SNAPSHOT</version>
<packaging>swf</packaging>
<build>
<sourceDirectory>src</sourceDirectory>
<plugins>
<!-- Details on the Flexmojos plugin -->
<plugin>
<groupId>org.sonatype.flexmojos</groupId>
<artifactId>flexmojos-maven-plugin</artifactId>
<version>4.0-RC1</version>
<configuration>
<sourceFile>./Main.swf</sourceFile>
<swfVersion>12</swfVersion>
</configuration>
<dependencies>
<dependency>
<groupId>com.adobe.flex</groupId>
<artifactId>compiler</artifactId>
<version>4.5.1.21328</version>
<type>pom</type>
</dependency>
</dependencies>
</plugin>
</plugins>
</build>
<dependencies> ... list of dependencies for building/testing ... </dependencies>
</project>
10. AUTOMATED
UNIT TESTING
Requirements
Standalone Flash Player
Add test folders and tests (Test*.as default)
Add test source location to your pom
<testSourceDirectory>src/test</testSourceDirectory>
Add Flexunit dependency to your pom
<dependency>
<groupId>com.adobe.flexunit</groupId>
<artifactId>flexunit</artifactId>
<version>4.0-rc-1</version>
<type>swc</type>
<scope>test</scope>
</dependency>
11. ADDING DEPENDENCIES
Not all dependencies are hosted remotely.
Some have to be installed manually via install:install-file goal.
> mvn install:install-file
-Dfile=[file]
-DgroupId=[groupId]
-DartifactId=[artifactId]
-Dversion=[version]
-Dpackaging=swc
12. FROM SOURCE TO IDE
Flexmojos has a goal to create Flashbuilder projects from Maven builds
Create a basic pom and source/test structure, then run the goal
> mvn org.sonatype.flexmojos:flexmojos-maven-plugin:3.9:flashbuilder
Note: when using Maven, you do not check in your .project, .settings or libs to source control. The
Flashbuilder goal will create these settings for you.
Why? Because your pom should be the definitive definition of the build - your project settings are only local to
your machine & environment.
13. ARCHETYPES
Maven supports beginning projects using archetypes (templates)
Flexmojos provides three main archetypes: library, application, modular application
> mvn archetype:generate
-DarchetypeRepository=http://repository.sonatype.com/content/groups/flexgroup
-DarchetypeGroupId=org.sonatype.flexmojos
-DarchetypeArtifactId=flexmojos-archetypes-application
-DarchetypeVersion=4.0-RC1
Typical prescription is the following folder structure
`-- src
|-- main
| |-- flex
| `-- resources
`-- test
|-- flex
`-- resources
Archetypes themselves are projects. You can create your own as templates for new
projects.
14. APPLICATIONS WITH
LIBRARIES
We can add a top-level pom with “pom” packaging
Then each artifact becomes a maven module, each with its own pom
Each Maven modules’ pom references the parent - dependencies and config will be
inherited
<parent>
<groupId>org.justinjmoses.flexmojos-introduction</groupId>
<artifactId>flexmojos-libraries</artifactId>
<version>0.1-SNAPSHOT</version>
</parent>
One Maven module can depend on another - Maven will work out build order
<dependency>
<groupId>org.justinjmoses.flexmojos-introduction</groupId>
<artifactId>flexmojos-libraries-library</artifactId>
<version>${project.version}</version>
<type>swc</type>
</dependency>
15. GOTCHAS
Always go back to first-principles - remove redundant code.
Keep your build script thin.
Try to reproduce outside your project - create an empty project
structure with the bare minimum to reproduce.
Check Flexmojos Google Groups.
Found a bug? It’s open source. Hone your Java skills and contribute to a
great plugin.
16. WHAT ELSE CAN IT DO?
Produce and optimise modular applications
Create RSLs from artifacts
Generate code coverage reports
Output asdoc documentation
Customise the build based on different settings / build environments /
sdks
Deploy as bundled WAR with HTML wrapper
17. RESOURCES
Code samples from today: github.com/justinjmoses
Flexmojos docs: docs.sonatype.org/display/FLEXMOJOS
Flexmojos goals and config: bitly.com/FM-4RC1-site
Flexmojos Google Groups: groups.google.com/forum/#!forum/flex-
mojos
@justinjmoses