2009-10-08 91 views
0

我有一组输入文件,其中的每一个处理,以产生一个输出文件的。在一种情况下,它冬眠的XML文件作为输入,java文件作为输出,但是这不是我要处理的唯一案例。每个文件相关的蚂蚁

在make中,我将设置一个规则来告诉它如何从.hbm.xml文件生成.java文件(以.hbm.xml为模,指定要生成的不同类名),以及修改单个.hbm.xml文件将触发构建单个.java文件。

如何表达蚂蚁的依赖关系,因此将只建造过时的.java文件,而不是所有的人都只是因为一个的.hbm.xml改变?

我看applyup-to-date,但没有看到一个解决方案尚未...

+0

所以在构建你产生每个.hbx.xml文件一个新的java文件,并且每次都因为蚂蚁看到变化的时间戳如新所有.java文件都会触发构建。它是否正确? – Steve 2009-10-09 11:41:41

+0

那天正好也是如此,但第一步是只生成需要是.java文件;我不希望这个构建做得比它更强。 – retracile 2009-10-09 12:47:00

回答

2

你有没有看着ant-contrib outofdate task

在文档末尾的例子看起来像是你可以使用:

<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

初始化蚂蚁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> 
+0

只是为了澄清,如果源子集是过时的,然后通过'命名outputsources'设置为_just那些sources_的列表,而不是所有的资源属性,正确吗? – retracile 2009-10-09 18:05:54

+0

正确,'outputsources'只列出源比各自的新目标。 – 2009-10-11 16:33:47