Apache flex 使用ant mxmlc任务向flex构建配置添加运行时库路径

Apache flex 使用ant mxmlc任务向flex构建配置添加运行时库路径,apache-flex,ant,mxmlc,Apache Flex,Ant,Mxmlc,我正在尝试构建一个flex项目,将其链接到一些RLS。在Flex Builder中设置项目时,相应的“build configuration”(我通过向编译器选项添加-dump config获得)生成(除其他外)如下标记: <runtime-shared-libraries> <url>some-lib.swf</url> <url>some-other-lib.swf</url> </runtime-shared-lib

我正在尝试构建一个flex项目,将其链接到一些RLS。在Flex Builder中设置项目时,相应的“build configuration”(我通过向编译器选项添加-dump config获得)生成(除其他外)如下标记:

<runtime-shared-libraries>
  <url>some-lib.swf</url>
  <url>some-other-lib.swf</url>
</runtime-shared-libraries>

some-lib.swf
some-other-lib.swf
现在,我正在尝试使用mxmlc ant任务构建项目,但我似乎无法添加对共享库的任何引用。我原以为这样做会有帮助,但事实并非如此:

<!-- Skipping attributes that I don't think are relevant ... -->
<mxmlc ....>
 ...
 <runtime-shared-library-path>
<url rsl-url="some-lib.swf"></url>
<url rsl-url="some-other-lib.swf"></url>
 </runtime-shared-library-path>
</mxmlc>

...
那么,我会错过什么呢


谢谢

我猜您缺少路径元素

        <runtime-shared-library-path path-element="${FLEX_FRAMEWORK}/framework.swc">
            <url rsl-url="framework_3.4.1.10084.swf"/>
            <!--<url rsl-url="datavisualization_3.2.0.3958.swf"/>-->
        </runtime-shared-library-path>

您需要通过“运行时共享库路径”元素上的“路径元素”属性指定自定义库的SWC路径,并在指向SWF的“url”元素中定义“rsl url”。请注意,每个自定义RSL都需要单独设置

要实现这一点,您需要解压缩SWC并从中提取SWF,以便编译器可以将其复制到输出文件夹

在一篇描述如何将Mate框架包含为RSL的帖子上有一条评论。我在下面添加了有趣的部分

首先,您必须自己从SWC文件中提取SWF


然后,您需要将此SWF文件作为RSL:


您可能会发现此xsl很有用。您可以从ant调用它,并从.actionScriptProperties文件生成RSL条目。我希望这有助于每个人通过RSL地狱!!!请看这里:

    <mxmlc output="${{dist.dir}}/${{inputMXML}}.swf"
                    file="${{src.dir}}/${{inputMXML}}.mxml"
                    locale="${{compiler.locale}}"
                    use-network="${{compiler.use-network}}"
                    debug="false"
                    optimize="true"
                    incremental="false">
                 <load-config filename="${{FLEX_HOME}}/frameworks/flex-config.xml"/>

                 <source-path path-element="${{src.dir}}"/>

                 <!-- Project RSLs -->
            <xsl:for-each select="//libraryPath/libraryPathEntry">
                 <xsl:if test="@linkType = '1'">
           <compiler.library-path>
                 <!--  substring before last '/' -->
                 <xsl:attribute name="dir">
                        <xsl:call-template name="substring-before-last">
                                     <xsl:with-param name="list" select="@path" />
                                     <xsl:with-param name="delimiter" select="'/'" />
                              </xsl:call-template>
                 </xsl:attribute>
                 <xsl:attribute name="append">true</xsl:attribute>
                       <xsl:element name="include">
                              <xsl:attribute name="name">
                                            <!--  substring after last '/' -->
                                            <xsl:call-template name="substring-after-last">
                                              <xsl:with-param name="string" select="@path" />
                                              <xsl:with-param name="delimiter" select="'/'" />
                                            </xsl:call-template>
                              </xsl:attribute>
                       </xsl:element>
           </compiler.library-path>
                 </xsl:if>
         </xsl:for-each>



                 <!-- Framework RSLs. Note: Order is important. Also note: swz comes
                      first. This is the signed version of the library which once
                      downloaded can be used cross-domain, possibly saving bandwidth -->
                 <runtime-shared-library-path path-element="${{FLEX_HOME}}/frameworks/libs/textLayout.swc">
                       <url rsl-url="textLayout_2.0.0.232.swz"/>
                       <url rsl-url="textLayout_2.0.0.232.swf"/>
                 </runtime-shared-library-path>
                 <runtime-shared-library-path path-element="${{FLEX_HOME}}/frameworks/libs/framework.swc">
                       <url rsl-url="framework_4.6.0.23201.swz"/>
                       <url rsl-url="framework_4.6.0.23201.swf"/>
                 </runtime-shared-library-path>
                 <runtime-shared-library-path path-element="${{FLEX_HOME}}/frameworks/libs/osmf.swc">
                       <url rsl-url="osmf_1.0.0.16316.swz"/>
                       <url rsl-url="osmf_1.0.0.16316.swf"/>

                 </runtime-shared-library-path>
                 <runtime-shared-library-path path-element="${{FLEX_HOME}}/frameworks/libs/charts.swc">
                       <url rsl-url="charts_4.6.0.23201.swz"/>
                       <url rsl-url="charts_4.6.0.23201.swf"/>
                 </runtime-shared-library-path>
                 <runtime-shared-library-path path-element="${{FLEX_HOME}}/frameworks/libs/rpc.swc">
                       <url rsl-url="rpc_4.6.0.23201.swz"/>
                       <url rsl-url="rpc_4.6.0.23201.swf"/>
                 </runtime-shared-library-path>
                 <runtime-shared-library-path path-element="${{FLEX_HOME}}/frameworks/libs/mx/mx.swc">
                       <url rsl-url="mx_4.6.0.23201.swz"/>
                       <url rsl-url="mx_4.6.0.23201.swf"/>
                 </runtime-shared-library-path>
                 <runtime-shared-library-path path-element="${{FLEX_HOME}}/frameworks/libs/spark.swc">
                       <url rsl-url="spark_4.6.0.23201.swz"/>
                       <url rsl-url="spark_4.6.0.23201.swf"/>
                 </runtime-shared-library-path>
                 <runtime-shared-library-path path-element="${{FLEX_HOME}}/frameworks/libs/advancedgrids.swc">
                       <url rsl-url="advancedgrids_4.6.0.23201.swz"/>
                       <url rsl-url="advancedgrids_4.6.0.23201.swf"/>
                 </runtime-shared-library-path>
                 <runtime-shared-library-path path-element="${{FLEX_HOME}}/frameworks/libs/sparkskins.swc">
                       <url rsl-url="sparkskins_4.6.0.23201.swz"/>
                       <url rsl-url="sparkskins_4.6.0.23201.swf"/>
                 </runtime-shared-library-path>
                 <runtime-shared-library-path path-element="${{FLEX_HOME}}/frameworks/libs/spark_dmv.swc">
                       <url rsl-url="spark_dmv_4.6.0.23201.swz"/>
                       <url rsl-url="spark_dmv_4.6.0.23201.swf"/>
                 </runtime-shared-library-path>

                 <!-- Project RSLs -->
                 <!-- Flex Ant Task Shortcoming. -->
                 <xsl:for-each select="//libraryPath/libraryPathEntry">
                 <xsl:if test="@linkType = '4'">
                         <runtime-shared-library-path>
                               <xsl:attribute name="path-element">
                                      <xsl:value-of select="@path" />
                               </xsl:attribute>
                       <xsl:element name="url">
                              <xsl:attribute name="rsl-url">
                                    <xsl:value-of select="crossDomainRsls/crossDomainRslEntry/@rslUrl" />
                              </xsl:attribute>
                       </xsl:element>
                         </runtime-shared-library-path>
                 </xsl:if>
         </xsl:for-each>
    </mxmlc>

真的

这似乎只是将元素添加到配置的“”部分(从某种意义上讲,这是合乎逻辑的)。这就是我将用于框架RSL的内容;在我的情况下,我想添加对我正在编译的RSL的引用(Flex Builder将其添加到配置的部分,所以我也天真地尝试这样做…),我会尝试的,谢谢。然而,这是否意味着在实践中FlashBuilder会在后台“解压缩swc-生成swf-根据swc编译并指定运行时的swf url”?(我试图理解为什么ant必须经历所有这些…)是的,Flash Builder能够为您做到这一点。勾选报价:“您可以让Flash Builder自动或手动从SWC文件中提取RSL的SWF文件。如果要手动从SWC文件提取RSL的swf文件,请取消选择自动提取swf到部署路径选项。否则,Flash Builder将为您提取SWF文件。通常,您应该手动提取SWF文件并在部署它之前对其进行优化。否则,library.swf文件将超出需要。”
<target name="compile">
  <mxmlc file="${src.dir}/MyApplication.mxml" output="${build.dir}/MyApplication.swf" locale="${locale}" debug="false">
    <!-- Flex default compile configuration -->
    <load-config filename="${flex.frameworks.dir}/flex-config.xml" />

    <!-- Main source path -->
    <source-path path-element="${src.dir}" />

    <runtime-shared-library-path path-element="${lib.dir}/mate.swc">
      <url rsl-url="rsls/mate.swf" />
    </runtime-shared-library-path>
  </mxmlc>
</target>
    <mxmlc output="${{dist.dir}}/${{inputMXML}}.swf"
                    file="${{src.dir}}/${{inputMXML}}.mxml"
                    locale="${{compiler.locale}}"
                    use-network="${{compiler.use-network}}"
                    debug="false"
                    optimize="true"
                    incremental="false">
                 <load-config filename="${{FLEX_HOME}}/frameworks/flex-config.xml"/>

                 <source-path path-element="${{src.dir}}"/>

                 <!-- Project RSLs -->
            <xsl:for-each select="//libraryPath/libraryPathEntry">
                 <xsl:if test="@linkType = '1'">
           <compiler.library-path>
                 <!--  substring before last '/' -->
                 <xsl:attribute name="dir">
                        <xsl:call-template name="substring-before-last">
                                     <xsl:with-param name="list" select="@path" />
                                     <xsl:with-param name="delimiter" select="'/'" />
                              </xsl:call-template>
                 </xsl:attribute>
                 <xsl:attribute name="append">true</xsl:attribute>
                       <xsl:element name="include">
                              <xsl:attribute name="name">
                                            <!--  substring after last '/' -->
                                            <xsl:call-template name="substring-after-last">
                                              <xsl:with-param name="string" select="@path" />
                                              <xsl:with-param name="delimiter" select="'/'" />
                                            </xsl:call-template>
                              </xsl:attribute>
                       </xsl:element>
           </compiler.library-path>
                 </xsl:if>
         </xsl:for-each>



                 <!-- Framework RSLs. Note: Order is important. Also note: swz comes
                      first. This is the signed version of the library which once
                      downloaded can be used cross-domain, possibly saving bandwidth -->
                 <runtime-shared-library-path path-element="${{FLEX_HOME}}/frameworks/libs/textLayout.swc">
                       <url rsl-url="textLayout_2.0.0.232.swz"/>
                       <url rsl-url="textLayout_2.0.0.232.swf"/>
                 </runtime-shared-library-path>
                 <runtime-shared-library-path path-element="${{FLEX_HOME}}/frameworks/libs/framework.swc">
                       <url rsl-url="framework_4.6.0.23201.swz"/>
                       <url rsl-url="framework_4.6.0.23201.swf"/>
                 </runtime-shared-library-path>
                 <runtime-shared-library-path path-element="${{FLEX_HOME}}/frameworks/libs/osmf.swc">
                       <url rsl-url="osmf_1.0.0.16316.swz"/>
                       <url rsl-url="osmf_1.0.0.16316.swf"/>

                 </runtime-shared-library-path>
                 <runtime-shared-library-path path-element="${{FLEX_HOME}}/frameworks/libs/charts.swc">
                       <url rsl-url="charts_4.6.0.23201.swz"/>
                       <url rsl-url="charts_4.6.0.23201.swf"/>
                 </runtime-shared-library-path>
                 <runtime-shared-library-path path-element="${{FLEX_HOME}}/frameworks/libs/rpc.swc">
                       <url rsl-url="rpc_4.6.0.23201.swz"/>
                       <url rsl-url="rpc_4.6.0.23201.swf"/>
                 </runtime-shared-library-path>
                 <runtime-shared-library-path path-element="${{FLEX_HOME}}/frameworks/libs/mx/mx.swc">
                       <url rsl-url="mx_4.6.0.23201.swz"/>
                       <url rsl-url="mx_4.6.0.23201.swf"/>
                 </runtime-shared-library-path>
                 <runtime-shared-library-path path-element="${{FLEX_HOME}}/frameworks/libs/spark.swc">
                       <url rsl-url="spark_4.6.0.23201.swz"/>
                       <url rsl-url="spark_4.6.0.23201.swf"/>
                 </runtime-shared-library-path>
                 <runtime-shared-library-path path-element="${{FLEX_HOME}}/frameworks/libs/advancedgrids.swc">
                       <url rsl-url="advancedgrids_4.6.0.23201.swz"/>
                       <url rsl-url="advancedgrids_4.6.0.23201.swf"/>
                 </runtime-shared-library-path>
                 <runtime-shared-library-path path-element="${{FLEX_HOME}}/frameworks/libs/sparkskins.swc">
                       <url rsl-url="sparkskins_4.6.0.23201.swz"/>
                       <url rsl-url="sparkskins_4.6.0.23201.swf"/>
                 </runtime-shared-library-path>
                 <runtime-shared-library-path path-element="${{FLEX_HOME}}/frameworks/libs/spark_dmv.swc">
                       <url rsl-url="spark_dmv_4.6.0.23201.swz"/>
                       <url rsl-url="spark_dmv_4.6.0.23201.swf"/>
                 </runtime-shared-library-path>

                 <!-- Project RSLs -->
                 <!-- Flex Ant Task Shortcoming. -->
                 <xsl:for-each select="//libraryPath/libraryPathEntry">
                 <xsl:if test="@linkType = '4'">
                         <runtime-shared-library-path>
                               <xsl:attribute name="path-element">
                                      <xsl:value-of select="@path" />
                               </xsl:attribute>
                       <xsl:element name="url">
                              <xsl:attribute name="rsl-url">
                                    <xsl:value-of select="crossDomainRsls/crossDomainRslEntry/@rslUrl" />
                              </xsl:attribute>
                       </xsl:element>
                         </runtime-shared-library-path>
                 </xsl:if>
         </xsl:for-each>
    </mxmlc>