蚂蚁 - UPTODATE任务:仅再生过时的文件(ant - uptodate task : re

2019-09-20 00:54发布

我是新来的蚂蚁,而用于Makefile文件。 在一个项目中,名为Message_zh.class等方面的国际化语言模块从zh.po等无条件地建有每编译,尽管它们已经存在,那样会浪费很多时间。 我想这些都是build.xml文件的相关部分:

<target id="msgfmt" name="msgfmt">
    <mkdir dir="po/classes" />
    <propertyregex property="filename"
              input="${file}"
              regexp="[.]*/po/([^\.]*)\.po"
              select="\1"
              casesensitive="false" />
    <exec dir="." executable="msgfmt">
        <arg line="--java2 -d po/classes -r app.i18n.Messages -l ${filename} po/${filename}.po"/>
    </exec>
</target>

<target id="build-languageclasses" name="build-languageclasses" >
    <echo message="Compiling po files." />
    <foreach target="msgfmt" param="file">
      <path>
        <fileset dir="po" casesensitive="yes">
          <include name="**/*.po"/>
        </fileset>
      </path>
    </foreach>
</target>

目标集结languageclasses在编译目标取决于等等,每一个汇总,一大堆再次msgfmted。 如何来写只有1 PO文件被更改,或2类文件不存在调用的msgfmt? 我会很高兴,如果这将不通过软件是可能的。 你能帮助或点我一个例子吗?

在溶液中的第一次尝试,使蚂蚁的行为没有什么区别:

<target id="build-languageclasses" description="compile if Messages??.class files not uptodate" name="build-languageclasses" unless="i18n.uptodate">
  <condition property="i18n.uptodate">
    <uptodate>
      <srcfiles dir="${po}" includes="**/*.po"/>
      <mapper type="glob" from="${po}/*.po" to="${po}/classes/app/i18n/Messages*.class"/>
    </uptodate>
  </condition>
  <echo message="Compiling po files." />
  <foreach target="msgfmt" param="file">
    <path>
      <fileset dir="po" casesensitive="yes">
        <include name="**/*.po"/>
      </fileset>
    </path>
  </foreach>
</target> 

什么是错在这里?

Answer 1:

问题是,你正在测试的属性i18n.uptodate运行之前uptodate任务。 你进入之前,您的条件块必须运行build-languageclasses目标。

你应该重新组织你的代码,这样的:

  • 除去unless="i18n.uptodate"上的主要对象
  • 所述分裂build-languageclasses成2靶。
  • 第一专用于您的条件的初始化和包含<condition>只有块。
  • 包含代码的第二生成你文件( <foreach>

第二目标被配置取决于属性有条件地运行i18n.uptodate由所述第一目标集。

编辑 -这里是UPTODATE任务的工作示例

<property name="source" value="${basedir}/src"/>
<property name="dist" value="${basedir}/dist"/>

<target name="init">
    <condition property="that.uptodate">
        <uptodate>
            <srcfiles dir="${source}" includes="*.txt"/>
            <mapper type="glob" from="*.txt" to="${dist}/*.bat"/>
        </uptodate>
    </condition>
</target>

<target description="check that" name="dist" unless="that.uptodate" depends="init">
    <echo>we have something to do!</echo>
</target>

HIH M.



Answer 2:

尝试使用ant-contrib -正在OutOfDate -如果你想要像在第一封邮件第二源结构http://ant-contrib.sourceforge.net/tasks/tasks/outofdate.html



文章来源: ant - uptodate task : regenerate only outdated files