我是新來的ant,而不是用於Makefiles。在一個項目中,名爲Message_zh.class等的i18n語言模塊是由zh.po等無條件編譯的,雖然它們已經存在,但浪費了很多時間。我想這些都是build.xml文件的相關部分:ant-uptodate任務:只重新生成過時的文件
<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>
什麼錯在這裏的?
謝謝。我接受,因爲你的答案包含解決問題的必要步驟。但是,我仍然有問題才能使其正常工作。 ant -verbose現在在uptodate塊中說:[uptodate](path)/po/ar.po跳過 - 不知道如何處理它。爲什麼只有在檢查時才能處理? – rwst 2012-07-24 08:07:00
我沒有。你能發佈代碼嗎?當你有這個消息時,ar.po文件是否升級或不同步? – poussma 2012-07-24 09:14:40
Messages_ar.class取決於ar.po,但是是最新的。 – rwst 2012-07-24 11:10:46