2

我的 ANT 文件中有以下代码片段,它将我的项目编译为 swf 文件:

<target name="my target">
<mxmlc  file="${APPS_DIR}//@{appName}.mxml" 
    output="${DEPLOY_APPS_DIR}/@{appName}.swf" 
    actionscript-file-encoding="UTF-8" 
    keep-generated-actionscript="false" 
    optimize="true" 
    debug="${DEBUG_TF}" 
    locale="en_US"
    static-rsls="false"
    static-link-runtime-shared-libraries="false"
    verify-digests="false"> 
<!-- BEGIN code A -->
...
...
...
<!-- END code A -->
</mxmlc>
</target>

由于我有很多以类似方式使用代码 A的文件,我想创建一个包含此代码的可分离文件。

但是,我怎样才能从主 ant 文件中调用它?

4

2 回答 2

1

我找到了解决方案。自己一边回答一边问。我是在这里找到的。

您可以使用 XML 包含外部文件的方式,并让解析器为 Ant 完成这项工作:

<?xml version="1.0"?>
<!DOCTYPE project [
       <!ENTITY common SYSTEM "common.xml">
]>
<project name="test" default="test" basedir=".">
  <target name="setup">
    ...
  </target>
  &common;
  ...   
</project>
于 2012-06-20T07:51:25.090 回答
1

使用import. 它的作用与实体包含相同,但它还使您能够覆盖目标并提供特殊属性,例如导入的 ant 文件的路径。从import文档:

因此,如果我导入一个名为 builddocs 的 docsbuild.xml 文件,我可以将其路径作为 ant.file.builddocs 获取,类似于主构建文件的 ant.file 属性。

更新(因为我没有正确阅读原始问题)

在您导入的文件中,创建presetdef如下

<presetdef name="mxmlc" uri="com.chercheinfo">
   <mxmlc> 
<!-- BEGIN code A -->
...
...
...
<!-- END code A -->
   </mxmlc>
</presetdef>

然后您可以将目标更改为:

<target name="my target">
    <kaissun:mxmlc  file="${APPS_DIR}//@{appName}.mxml" 
        output="${DEPLOY_APPS_DIR}/@{appName}.swf" 
        actionscript-file-encoding="UTF-8" 
        keep-generated-actionscript="false" 
        optimize="true" 
        debug="${DEBUG_TF}" 
        locale="en_US"
        static-rsls="false"
        static-link-runtime-shared-libraries="false"
        verify-digests="false"> 
    </kaissun:mxmlc>
</target>

(您需要将以下属性添加到要绑定到xmlns:kaissun="com.chercheinfo"project元素中)kaissuncom.chercheinfo

您也可以使用presetdef预设公共属性。例如,

<presetdef name="mxmlc" uri="com.chercheinfo">
   <mxmlc actionscript-file-encoding="UTF-8"
       keep-generated-actionscript="false"
       optimize="true"
       locale="en_US"
       static-rsls="false"
       static-link-runtime-shared-libraries="false"
       verify-digests="false"> 
<!-- BEGIN code A -->
...
...
...
<!-- END code A -->
   </mxmlc>
</presetdef>

将允许您将目标缩小到

<target name="my target">
    <kaissun:mxmlc  file="${APPS_DIR}//@{appName}.mxml" 
        output="${DEPLOY_APPS_DIR}/@{appName}.swf" 
        debug="${DEBUG_TF}"> 
    </kaissun:mxmlc>
</target>

:D

于 2012-06-20T10:53:09.457 回答