<component-set>
    <components>

        <!--

                Default lifecycle for a flex artifact with packaging "swf"

        -->
        <component>
            <role>org.apache.maven.lifecycle.mapping.LifecycleMapping</role>
            <role-hint>swf</role-hint>
            <implementation>org.apache.maven.lifecycle.mapping.DefaultLifecycleMapping</implementation>
            <configuration>
                <phases>
                    <!--validate></validate>
                    <initialize></initialize-->
                    <generate-sources>org.apache.flex.maven.plugin:flex-maven-plugin:generate</generate-sources>
                    <!--process-sources></process-sources-->
                    <!--generate-resources></generate-resources>
                    <process-resources></process-resources-->
                    <compile>org.apache.flex.maven.plugin:flex-maven-plugin:compile</compile>
                    <!--process-classes></process-classes-->
                    <generate-test-sources>org.apache.flex.maven.plugin:flex-maven-plugin:test-generate</generate-test-sources>
                    <!--process-test-sources></process-test-sources>
                    <generate-test-resources></generate-test-resources>
                    <process-test-resources></process-test-resources-->
                    <test-compile>org.apache.flex.maven.plugin:flex-maven-plugin:test-compile</test-compile>
                    <!--process-test-classes></process-test-classes-->
                    <test>org.apache.flex.maven.plugin:flex-maven-plugin:test</test>
                    <!--prepare-package></prepare-package-->
                    <package>org.apache.flex.maven.plugin:flex-maven-plugin:optimize</package>
                    <!--pre-integration-test></pre-integration-test>
                    <integration-test></integration-test>
                    <post-integration-test></post-integration-test>
                    <verify></verify>
                    <install></install>
                    <deploy></deploy-->
                </phases>
            </configuration>
        </component>

        <!--

                Default lifecycle for a flex artifact with packaging "swc"

        -->
        <component>
            <role>org.apache.maven.lifecycle.mapping.LifecycleMapping</role>
            <role-hint>swc</role-hint>
            <implementation>org.apache.maven.lifecycle.mapping.DefaultLifecycleMapping</implementation>
            <configuration>
                <phases>
                    <!--validate></validate>
                    <initialize></initialize-->
                    <generate-sources>org.apache.flex.maven.plugin:flex-maven-plugin:generate</generate-sources>
                    <!--process-sources></process-sources-->
                    <!--generate-resources></generate-resources>
                    <process-resources></process-resources-->
                    <compile>org.apache.flex.maven.plugin:flex-maven-plugin:compile</compile>
                    <!--process-classes></process-classes-->
                    <generate-test-sources>org.apache.flex.maven.plugin:flex-maven-plugin:test-generate</generate-test-sources>
                    <!--process-test-sources></process-test-sources>
                    <generate-test-resources></generate-test-resources>
                    <process-test-resources></process-test-resources-->
                    <test-compile>org.apache.flex.maven.plugin:flex-maven-plugin:test-compile</test-compile>
                    <!--process-test-classes></process-test-classes-->
                    <test>org.apache.flex.maven.plugin:flex-maven-plugin:test</test>
                    <!--prepare-package></prepare-package-->
                    <package>org.apache.flex.maven.plugin:flex-maven-plugin:optimize</package>
                    <!--pre-integration-test></pre-integration-test>
                    <integration-test></integration-test>
                    <post-integration-test></post-integration-test>
                    <verify></verify>
                    <install></install>
                    <deploy></deploy-->
                </phases>
            </configuration>
        </component>

        <!--

                Tell Maven how to deal with the different types of flex artifacts

        -->
        <component>
            <role>org.apache.maven.artifact.handler.ArtifactHandler</role>
            <role-hint>swc</role-hint>
            <implementation>org.apache.maven.artifact.handler.DefaultArtifactHandler</implementation>
            <configuration>
                <!-- Extension used by artifacts in the repository -->
                <extension>swc</extension>
                <!-- Type used when specifying dependencies -->
                <type>swc</type>
                <!-- Type used when specifying the packaging of an artifact -->
                <packaging>swc</packaging>
            </configuration>
        </component>
        <component>
            <role>org.apache.maven.artifact.handler.ArtifactHandler</role>
            <role-hint>swf</role-hint>
            <implementation>org.apache.maven.artifact.handler.DefaultArtifactHandler</implementation>
            <configuration>
                <extension>swf</extension>
                <type>swf</type>
                <packaging>swf</packaging>
            </configuration>
        </component>
    </components>
</component-set>