我一直在尝试让以下内容在ant中工作,但一直无法使用。
该场景,我希望能够根据源目录中的任何文件是否被复制到目标目录中来设置要在检查中使用的属性。对于空目标目录,较新版本的源文件以及源目录中不在目标目录中的较新文件,情况应该如此。
我的原型build.xml文件如下:
<?xml version="1.0"?>
<project name="build01" default="make.obj">
<property name="src.dir" value="${basedir}/src"/>
<property name="obj.dir" value="${basedir}/obj"/>
<fileset id="src.files" dir="${src.dir}"/>
<target name="make.obj" depends="check.make.obj" unless="make.obj.notneeded">
<copy todir="${obj.dir}">
<fileset refid="src.files"/>
</copy>
<property name="do.something.else" value="true"/>
</target>
<target name="check.make.obj">
</target>
<target name="make.final" depends="make.obj" unless="do.something.else">
<exec executable="mkisofs">
<arg value="-o"/>
<arg value="foo.iso"/>
<arg value="obj"/>
</exec>
</target>
</project>
我的原型构建目录最初看起来如下:
.
+ build.xml
+ obj
+ src
+ file01.txt
+ file02.txt
在初次调用ant之后,我想看到以下内容:
.
+ build.xml
+ foo.iso
+ obj
| + file01.txt
| + file02.txt
+ src
+ file01.txt
+ file02.txt
如果我再次运行ant而不做任何更改,我不希望ant更新obj目录或重新制作foo.iso。
如果我更新src / file01.txt,src / file02.txt,或者添加一个文件(例如src / file03.txt),我希望ant更新obj目录,我希望ant重新制作foo.iso。
我尝试过不同的任务,但我无法正常工作。
有什么建议吗?
答案 0 :(得分:1)
替换它:
<property name="do.something.else" value="true"/>
用这个:
<uptodate targetfile="foo.iso" property="do.something.else">
<srcfiles dir="${obj.dir}"/>
</uptodate>
如果目标存在并且比源更新,则 <uptodate>
设置属性。
答案 1 :(得分:0)
为了澄清,以下内容始终返回true
<target name="make.final">
<echo message="Inside make.final"/>
<uptodate property="copy.notneeded">
<srcfiles dir="src" includes="file01.txt"/>
<mapper type="glob" from="src/*" to="obj/*"/>
</uptodate>
<echo message="copy.notneeded=${copy.notneeded}"/>
</target>
如果obj目录存在与否,或者src中的所有文件是否已存在于obj中,则无关紧要。
我也尝试用“正则表达式”取代“glob”,这似乎也不起作用。