我们正在使用JiBX。重要的是要知道JiBX修改已编译的类文件。
我们编译:
<javac destdir="${main.destdir}">
<src path="${main.srcdir}"/>
<classpath refid="main.classpath"/>
</javac>
然后,我们打电话给JiBX:
<jibx load="true"
binding="{$binding.file}">
<classpath refid="main.classpath"/>
<classpath refid="main.destdir.classpath"/>
</jibx>
这使用一个XML文件来更新上面<javac>
编译的类文件。问题是如何知道文件已编译,但未由JiBX处理?我想在我的程序中加入一些逻辑,因此JiBX不会对文件进行两次更新。此外,重复已经完成的工作是不好的形式。
答案 0 :(得分:2)
在jibx构建步骤之后,生成一个标记文件,例如
<touch file="${target.dir}/jibx.marker" />
如果该标记文件早于.class文件(表示javac比最后一个jibx运行得更新),则仅执行jibx构建步骤。
对于那一点逻辑,你可以使用传统的蚂蚁方式:
<uptodate property="jibx.uptodate" targetfile="${target.dir}/jibx.marker">
<srcfiles dir="${main.destdir}" includes="...../*.class" />
</uptodate>
然后在调用jixb目标时使用带有unless子句的属性。
或者,您可以使用Antcontrib的outofdate替代方案:
<outofdate>
<sourcefiles>
<fileset dir="${main.destdir}" includes="...../*.class" />
</sourcefiles>
<targetfiles>
<fileset dir="${target.dir}" includes="jibx.marker"/>
</targetfiles>
<sequential>
<jibx load="true"
binding="{$binding.file}">
<classpath refid="main.classpath"/>
<classpath refid="main.destdir.classpath"/>
</jibx>
</sequential>
</outofdate>
答案 1 :(得分:0)
我这是给Patrice M.的,因为他的建议让我走上正轨。然而,正如他所说,它并没有完全奏效。 (对不起,如果我说他的代名词是错的,但Patrice可以是男性或女性的名字。)
我要做的是创建两个监视文件:一个用于Java编译,一个用于JiBX更改。
<!-- Check if Javac is out of date. If so, create javac watcher -->
<outofdate verbose="true">
<sourcefiles>
<fileset dir="${main.srcdir}">
<include name="*.java"/>
</fileset>
</sourcefiles>
<mapper type="regexp"
from="${main.srcdir}/(.*)\.java"
to="${main.destdir}/(\1).class"/>
<sequential>
<echo message="Java compiled"/>
<echo message="Java compiled"
file="${target.dir}/${javac.monitor.file}"/>
</sequential>
</outofdate>
<javac destdir="${main.destdir}"
debug="${javac.debug}">
<src path="${main.srcdir}"/>
<classpath refid="main.classpath"/>
</javac>
<!-- Compare javac and jibx monitoring file -->
<!-- If out of date, rerun jibx -->
<outofdate>
<sourcefiles>
<fileset dir="${target.dir}">
<include name="${javac.monitor.file}"/>
</fileset>
</sourcefiles>
<targetfiles>
<fileset dir="${target.dir}">
<include name="${jibx.monitor.file}"/>
</fileset>
</targetfiles>
<sequential>
<jibx load="true"
binding="${target.dir}/binding-gg.xml">
<classpath refid="main.classpath"/>
<classpath refid="main.destdir.classpath"/>
</jibx>
<!-- Create JiBX monitoring file -->
<echo message="Compiled and JiBX"
file="${target.dir}/${jibx.monitor.file}"/>
</sequential>
</outofdate>
如果源代码已经过时,我会创建javac监控文件,因为这是我编译的时候。我必须创建JiBX outofdate监控文件,只有当我运行JiBX并且它在JiBX的<outofdate>
内时。
我想我也可以在XML JiBX文件上放一个来源,以确保。