我有一组输入文件,每个文件都被处理以生成输出文件。在一种情况下,它将hibernate xml文件作为输入,将java文件作为输出,但这不是我必须处理的唯一情况。
在make中,我会设置一个规则来告诉它如何从.hbm.xml文件生成.java文件(模块化.hbm.xml指定要生成的不同类名),并修改单个.hbm.xml文件将触发单个.java文件的构建。
如何在ant中表达依赖关系,这样只会因为一个.hbm.xml发生变化而只构建过时的.java文件而不是所有文件?
我正在查看apply
和up-to-date
,但尚未看到解决方案......
答案 0 :(得分:2)
你看过ant-contrib outofdate task吗?
doc末尾的示例看起来像你可以使用的东西:
<outofdate property="manual.outofdate"
outputsources="grammer.sources">
<sourcefiles>
<fileset dir="${src.grammer}" includes="**/*.y"/>
</sourcefiles>
<mapper type="glob" dir="${src.grammer}" from="*.y" to="${gen.grammer}/*.c"/>
<mapper type="glob" dir="${src.grammer}" from="*.y" to="${gen.grammer}/*.h"/>
<sequential>
<shellscript shell="bash">
cd ${gen.grammer}
for g in ${grammer.sources}
do
gengrammer $g
done
</shellscript>
</sequential>
</outofdate>
另请注意,您可以在outofdate
任务的正文中使用ant-contrib "for" task。
要初始化ant-contrib,请执行以下操作:
<property name="ant-contrib.jar" location="..."/>
<taskdef
resource="net/sf/antcontrib/antlib.xml"
uri="http://ant-contrib.sourceforge.net"
>
<classpath>
<pathelement location="${ant-contrib.jar}"/>
</classpath>
</taskdef>