必须有一个简单的方法来做到这一点。我使用依赖于SWC库的ant构建一个Flex应用程序,除了无论是否需要重建库之外,它都能正常工作。如果库(* .as,* .mxml)的任何源文件比SWC更新,我如何告诉ant只运行任务?
我看过< dependset>但它似乎只是删除文件,而不是确定是否应该运行任务。 <取决于>似乎期望源文件和目标文件之间存在一对一的关系,而不是一对多的关系 - 我有很多输入文件和一个输出文件,但没有中间目标文件。
非常感谢, 亚历
答案 0 :(得分:21)
您可以使用Ant uptodate task创建属性,并仅在设置了该属性后才执行其他目标。
我对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>
答案 1 :(得分:10)
来自OutOfDate库的ant contrib任务比IM 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>
一切都保存在一个目标内。