【问题标题】:How do I build an Ant script to do different compilations based on my target output. AIR vs Swf?如何构建一个 Ant 脚本来根据我的目标输出进行不同的编译。 AIR VS 瑞士法郎?
【发布时间】:2011-10-23 09:53:59
【问题描述】:

如何构建一个 Ant 脚本来输出 swfs 和 air 包,并在编译期间根据我想要的目标使用不同的类?

例如,我正在构建一个适用于网络、移动设备和桌面的应用程序。在某些情况下,我的类将只使用 AIR 组件。我希望能够创建在为 Web 输出 swf 时不包含这些类的 ANT 构建脚本。我该怎么做?

【问题讨论】:

    标签: flash actionscript-3 ant air flash-builder


    【解决方案1】:

    这是我针对类似情况所做的:

    <target name="define.compile.task" depends="initflex">
        <presetdef name="flex.build">
            <mxmlc file="${src.dir}/${src.file.path}" 
                    output="${output.dir}/${output.file.path}" ...>
                <compiler.source-path path-element="${src.dir}"/>
                ...
            </mxmlc>
        </presetdef>
    </target>
    
    <target name="parametrized.web.build" depends="define.compile.task">
        <flex.build>
            <compiler.define name="CONFIG::AllowAirComponents" value="false" />
        </flex.build>   
    </target>
    
    
    <target name="parametrized.air.build" depends="define.compile.task">
        <flex.build configname="airmobile">
            <compiler.define name="CONFIG::AllowAirComponents" value="true" />
        </flex.build>   
    </target>
    

    然后,我可以定义类似的目标

    <target name="buildwebclass1">
         <antcall target="parametrized.web.build">
              <param name="src.file.path" value="path/to/MyClass.as"/>
              <param name="output.file.path" value="MyClass.swf"/>
         </antcall>
    </target>
    

    或者:

    <target name="buildairclass1">
         <antcall target="parametrized.air.build">
              <param name="src.file.path" value="path/to/MyAirClass.as"/>
              <param name="output.file.path" value="MyAirClass.swf"/>
         </antcall>
         <exec executable="${FLEX_HOME}/bin/adt" failonerror="true">
             ... (adt arguments)
         </exec>
    </target>
    

    如果我有一些公共代码工厂仅在必要时实例化 air 类,我会用 CONFIG::AllowAirComponents { ... } 包装它,这样我的 AIR 特定类就不会干扰 Web 构建。

    希望这会有所帮助!

    【讨论】:

    • 哦,谢谢。您是将导入语句包装在 CONFIG::AllowAirComponents 中还是只是类的实例化?此外,如果我使用的是 Robotlegs 和 [Inject] MetaData,我可以将 CONFIG::AllowAir 也包裹在 Injection 元数据周围还是会发生冲突?
    • 嗯...在我的情况下,相关代码在同一个包中,所以我不需要导入。我也不知道注射 - 你必须尝试让我们知道它是怎么回事......
    • Bob,未使用的导入应该在编译时忽略,所以你不需要关心它们。关于 Robotlegs:不确定 Inject metatag + 条件编译,但也许你最好回顾一下架构?例如。针对接口注入,但通过条件编译定义适当的映射。或者,如果你注入真正的类——如果你通过条件编译映射“正确”的类应该没有问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-02
    • 1970-01-01
    • 2017-02-11
    • 2020-02-11
    • 1970-01-01
    相关资源
    最近更新 更多