代码之家  ›  专栏  ›  技术社区  ›  retracile

Ant中的每个文件依赖项

  •  0
  • retracile  · 技术社区  · 15 年前

    我有一组输入文件,每个文件都被处理以生成一个输出文件。在一种情况下,它是Hibernate XML文件作为输入,Java文件作为输出,但这不是我必须处理的唯一情况。

    在Sub中,我会设置一个规则来告诉它如何从.HB.xml文件生成一个.java文件(Mult.HB.xml指定一个不同的类名来生成),修改一个.HB.xml文件将触发一个.java文件的构建。

    如何表达Ant中的依赖项,因此只构建过时的.java文件,而不是仅仅因为一个.HB.xml改变了它们?

    我在看 apply up-to-date ,但尚未看到解决方案…

    1 回复  |  直到 15 年前
        1
  •  2
  •   Alexander Pogrebnyak    15 年前

    你看过吗 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>
    

    还要注意,您可能会使用 ant-contrib "for" task 在尸体里 outofdate 任务。

    要初始化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>