16

必须有一个简单的方法来做到这一点。我使用依赖于 SWC 库的 ant 构建了一个 Flex 应用程序,除了它是否需要重建库之外,它工作正常。如果库的任何源文件(*.as、*.mxml)比 SWC 更新,我如何告诉 ant 只运行任务?

我看过 <dependset> 但它似乎只是删除文件,而不是确定是否应该运行任务。<depend> 似乎期望源文件和目标文件之间存在一对一的关系,而不是一对多的关系——我有许多输入文件和一个输出文件,但没有中间目标文件。

非常感谢,亚历克斯

4

2 回答 2

21

您可以使用 Ant uptodate 任务来创建一个属性,并且只有在设置了该属性时才执行您的其他目标。

我对 flex 了解不多,但你可能想要这样的东西:

<?xml version="1.0" encoding="UTF-8"?>
<project name="test" default="compile">

   <target name="checkforchanges">
      <uptodate property="nochanges">
         <srcfiles dir="." includes="**/*.as"/>
         <srcfiles dir="." includes="**/*.mxml"/>
         <mapper to="applicaton.flex"/>
      </uptodate>
   </target>

   <target name="compile" depends="checkforchanges" unless="nochanges">
      ...
   </target>

</project>
于 2009-02-02T17:23:23.390 回答
10

ant contrib库中的OutOfDate任务在IMO 中比 Ant选项干净得多。原因是您必须定义其他目标才能设置属性。uptodate

Ant contrib 的解决方案(来自他们的示例页面):

<outofdate>
    <sourcefiles>
        <pathelement path="build.xml"/>
        <fileset dir="${lib.dir}"/>
    </sourcefiles>
    <targetfiles path="${jrun.file}"/>
    <sequential>
        <mkdir dir="${build.bin.dir}"/>
        <echo file="${jrun.file}" message="java -cp ${jrun.path} $*"/>
        <chmod file="${jrun.file}" perm="ugo+rx"/>
    </sequential>
</outofdate> 

一切都很好地保存在一个目标内。

于 2009-02-05T21:44:52.643 回答