How can I reproduce the functionality of the Flash Builder release tool in ant?

I want to create an ant script that performs the same compilation steps in a Flash Builder 4 (Gumbo) project as in a menu item Project->Export Release Build.... My ant -fu is strong enough, that’s not a problem, but I don’t know exactly what this record does.

Some information:

  • I will use the SDK 3.x (say 3.2 for specifics) to build this.
  • I will build on a Mac, and I can happily use ant, make, or some weird shell script if that is how you roll.
  • Any useful optimizations you can offer will be welcome.
  • A project contains several assets, MXML and an ActionScript source, and a couple of .swcs that are built into the project (and not RSL'd).

Can someone provide the ant build.xml or makefle that they use to create the .swf file for release from a similar Flex project?

+3
source share
3 answers

One quick way to find out compiler options is to add this tag to your compiler options:

-dump-config your / drive / to / store // xmlfile.xml

This will print out all the ant compiler options, and you can copy the parts you want to keep.

+2
source

HellFire Compiler Daemon (http://bytecode-workshop.com/) build.xml , Flex/Flash Builder. , ant script SWC SWF , Flex/Flash Builder.

, :

http://stopcoding.wordpress.com/2010/01/15/ant-tasks-for-hfcd-now-available-2/

+1

Adobe Flex Ant , exec mxmlc , . , , build.xml, , FB3 ( ), , ... , ant -fu , .

<!--flex stuff-->
<property name="dir.flex.sdk"                 value="${system.build.flex.sdk}"/>
<property name="dir.flex.home"                value="${dir.abc}/flex/sdks/${dir.flex.sdk}"/>
<property name="dir.flex.projects"            value="${dir.abcd_plat}/webapp/flexprojects/"/>
<property name="dir.modules"                  value="${dir.war}/modules/"/>
<property name="FLEX_HOME"                    value="${dir.flex.home}"/>
<property name="APP_ROOT"                     value="${dir.war}"/>
<property name="flexc.exe"                    value="This should be set in the build-${os.family}.xml file"/>
<property name="asdoc.exe"                    value="This should be set in the build-${os.family}.xml file"/>
<property name="optimizer.exe"                value="This should be set in the build-${os.family}.xml file"/>
<property name="flex.mxmlc"                   value="${dir.flex.home}/bin/${flexc.exe}"/>
<property name="flex.compc"                   value="${dir.flex.home}/bin/${compc.exe}"/>
<property name="flex.asdoc"                   value="${dir.flex.home}/bin/${asdoc.exe}"/>
<property name="flex.optimizer"               value="${dir.flex.home}/bin/${optimizer.exe}"/>
<property name="flex.options.warnings"        value="false"/>
<!--options that are used in common for compiling all .swc and .swf files-->
<property name="flex.meta.1"                  value="-creator 'MyCorp.' -publisher 'MyCorp.'"/>
<property name="flex.meta.2"                  value="-title MegaProduct -description http://ourURL.com"/>
<property name="flex.meta.props"              value="${flex.meta.1} ${flex.meta.2}"/>
<property name="debug.options"                value="-optimize=true -debug=false"/>
<property name="common.flex"                  value="-as3 -target-player=9.0.124 -warnings=${flex.options.warnings}"/>
<property name="license.flex3"                value="(put your own here)"/>
<property name="common.fixed"                 value="-license=flexbuilder3,${license.flex3} -sp ${dir.war} -library-path+=${dir.webinf}/lib"/>
<property name="flex.common.args"             value="${flex.meta.props} ${debug.options} ${common.flex} ${common.fixed}"/>
<!--this is currently unused, but if we make a debug version, this can be set to make a separate output file-->
<property name="swf.suffix"                   value=""/>

<!--=================================================================================
    MACRODEFs
-->
<!--this is used to extract .swf files from 3rd party .swc libraries, in order to do dynamic linking-->
<macrodef name="extract-flex-lib" description="For modularizing flex compilation">
    <attribute name="swc-lib" default="NOT SET"/>

    <sequential>
        <!--use a copy task - it can get the file out of the zip, and rename it at the same time-->
        <copy todir="${dir.war}" preservelastmodified="true">
            <zipfileset src="${dir.webinf}/lib/@{swc-lib}.swc">
                <patternset>
                    <include name="library.swf"/>
                </patternset>
            </zipfileset>
            <mapper type="glob" from="library.swf" to="@{swc-lib}-debug.swf"/>
        </copy>
        <!--run the flex optimizer on the extracted .swf - note the as3 metadata that kept, it required-->
        <exec executable="${flex.optimizer}" failonerror="true">
            <arg line="-keep-as3-metadata='Bindable,Managed,ChangeEvent,NonCommittingChangeEvent,Transient'"/>
            <arg line="-input @{swc-lib}-debug.swf -output @{swc-lib}.swf"/>
        </exec>
        <!--delete the unoptimzed swf, don't need it anymore-->
        <delete file="@{swc-lib}-debug.swf"/>
    </sequential>
</macrodef>

<!--this is used to compile our internal flex modules-->
<macrodef name="flexc-mxml" description="For building the flex modules during flex compilation">
    <attribute name="name"        default=""/>
    <attribute name="mxml.args"   default="${flex.common.args} ${module.args}"/>
    <attribute name="sourcePath"  default=""/>
    <attribute name="destPath"    default=""/>

    <sequential>
        <echo message="  Compiling with mxmlc: @{name}"/>
        <exec executable="${flex.mxmlc}" failonerror="true">
            <arg line="@{mxml.args} @{sourcePath} -output @{destPath}"/>
        </exec>
    </sequential>
</macrodef>

<!--this is used to compile our subprojects under abcd_plat/webapp/flexprojects-->
<macrodef name="flexc-subproject" description="For compiling the flex subprojects into .swc files">
    <attribute name="name"        default=""/>
    <attribute name="xtra.args"   default=""/>

    <sequential>
        <echo/>
        <echo message=" Compiling subproject: @{name}"/>
        <xslt in="${dir.flex.projects}/@{name}/.flexLibProperties" out="${dir.flex.projects}/@{name}/src/manifest.xml" style="${dir.war}/build-manifest-style.xsl"/>
        <exec executable="${flex.compc}" failonerror="true">
            <arg line="-load-config+=${dir.flex.projects}/@{name}/include-files.xml"/>
            <arg line="-namespace http://@{name}.ourURL.com ${dir.flex.projects}/@{name}/src/manifest.xml"/>
            <arg line="-include-namespaces http://@{name}.ourURL.com @{xtra.args}"/>
            <arg line="-library-path+=${dir.webinf}/lib -sp ${dir.flex.projects}/@{name}/src -output ${dir.webinf}/lib/@{name}.swc"/>
        </exec>
    </sequential>
</macrodef>


<!--=================================================================================
    This is where all the compilation is done.  The actual work is split among
    several different tasks in order to organize them better.

    This target uses the html-wrapper task defined in flexTasks.jar - see taskdef above.
-->
<target name="flexcompile" depends="flexc-modularize" description="Builds the Flex sources" unless="flexc.notRequired.main">
    <echo message="Compiling MegaProduct Flex application on OS family: ${os.family}"/>
    <echo message="   mxmlc is: ${flex.mxmlc}"/>
    <echo message="   compc is: ${flex.compc}"/>

    <!--compile flex sub-projects first (main application depends on these extra libraries)-->
    <antcall target="flexc-projects"/>

    <!--compile the main MegaProduct application-->
    <antcall target="flexc-main"/>

    <!--compile the foobar stuff, which link against the main app.  these foorbars are modules
     inside a subproject, so they are handled differently from other flex projects and modules-->
    <antcall target="flexc-foorbars"/>

    <!--generate the html wrapper for the .swf-->
    <html-wrapper title="MyCorp MegaProduct" application="app_name" swf="app_name" history="false" template="express-installation"/>
</target>

<target name="flexc-projects">
    <!--the name must match the name of the folder exactly, also they are not in parallel as some depend on others-->
    <flexc-subproject name="Dockable"/>
    <flexc-subproject name="EXRibbon" xtra.args="-source-path+=${dir.flex.projects}/EXRibbon/locale/en_US/"/>
    <!--note: MPLib does some extra stuff with the image dir in order to link against images correctly-->
    <copy todir="${dir.flex.projects}/MPLib/src/image"><fileset dir="${dir.war}/image"/></copy>
    <flexc-subproject name="MPLib"/>
    <delete dir="${dir.flex.projects}/MPLib/src/image"/>
</target>

<target name="flexc-main">
    <!--the link report is used to create the symbols in the main swf, and modules link against it-->
    <property name="link.report"   value="${dir.war}/abc_link_report.xml"/>

    <!--modular.args is set in flexc-modularize.  If not set, this sets it to an empty property-->
    <property name="modular.args"  value=""/>

    <!--set up options specific for the main part and for the modules-->
    <property name="main.args"     value="-link-report=${link.report} ${modular.args}"/>
    <property name="module.args"   value="-load-externs=${link.report}"/>

    <!--compile abc_flex.mxml here-->
    <echo message="Compiling abc_flex application, sub-applications and modules..."/>
    <echo/>
    <flexc-mxml name="abc_flex" mxml.args="${flex.common.args} ${main.args}"
            sourcePath="${dir.war}/abc_flex.mxml" destPath="${dir.war}/abc_flex${swf.suffix}.swf"/>

    <!--compile MPMainSubApplication.mxml sub-application here-->
    <flexc-mxml name="MPMainSubApplication" mxml.args="${flex.common.args} ${main.args}"
            sourcePath="${dir.war}/MPMainSubApplication.mxml" destPath="${dir.war}/MPMainSubApplication.swf"/>

    <!--compile internal modules next - just add new modules to the list here -->
    <parallel>   <!--do in parallel - it goes faster and they don't depend on each other-->
        <property name="dir.module.src" value="${dir.war}/module/"/>
        <flexc-mxml name="module1"      sourcePath="${dir.module.src}/editor/Editor.mxml"          destPath="${dir.module.src}/editor/Editor.swf"          />
        <flexc-mxml name="RunModule"   sourcePath="${dir.module.src}/run/RunModule.mxml"          destPath="${dir.module.src}/run/RunModule.swf"          />
        <!--<flexc-mxml name="JobManager"  sourcePath="${dir.module.src}/jobmanager/JobManager.mxml"  destPath="${dir.module.src}/jobmanager/JobManager.swf"  />-->
        <flexc-mxml name="Editor2"        sourcePath="${dir.module.src}/edit/Editor.mxml"                destPath="${dir.module.src}/edit/Editor.swf"                />
    </parallel>
</target>

:

, , .swc Java WEB-INF/lib, , flex lib . , . , ; , , , - , - ( ). - linux, flexc.exe( ) - . , , , , n-paste.

In addition, incremental compilation is not actually used; It seems to be buggy. The same goes for modulation materials, so I did not include this goal.

I built it all myself, so I'm pretty proud of it, but if there is something that looks bad or smells bad, please feel free to let me know. Thanks!

0
source

Source: https://habr.com/ru/post/1717943/


All Articles