我是蚂蚁的新手,而且习惯于Makefile。在一个项目中,名为Message_zh.class等的i18n语言模块是在每次编译时无条件地从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>
目标构建语言类依赖于编译目标,因此,每次编译时,整个字符串都会再次被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>
这里有什么问题?
答案 0 :(得分:1)
问题是您在运行i18n.uptodate
任务之前测试了属性uptodate
。您必须在输入build-languageclasses
目标之前运行条件块。
您应该重新组织代码:
unless="i18n.uptodate"
build-languageclasses
拆分为2个目标。 <condition>
块。<foreach>
)第二个目标配置为根据第一个目标设置的属性i18n.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 微米。
答案 1 :(得分:0)
尝试使用ant-contrib - OutOfDate - 如果你想在第一个邮件中使用第二个源中的结构 http://ant-contrib.sourceforge.net/tasks/tasks/outofdate.html