Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 用丢失的文件更新目标目录并重新设置属性_Java_Ant - Fatal编程技术网

Java 用丢失的文件更新目标目录并重新设置属性

Java 用丢失的文件更新目标目录并重新设置属性,java,ant,Java,Ant,我一直在尝试让下面的内容在ant中工作,但未能成功 在这个场景中,我希望能够根据源目录中的任何文件是否被复制到目标目录,设置一个用于检查的属性。对于空的目标目录、源文件的较新版本以及源目录中不在目标目录中的较新文件,应该是这样 我的prototype build.xml文件如下所示: <?xml version="1.0"?> <project name="build01" default="make.obj"> <property name="src.dir

我一直在尝试让下面的内容在ant中工作,但未能成功

在这个场景中,我希望能够根据源目录中的任何文件是否被复制到目标目录,设置一个用于检查的属性。对于空的目标目录、源文件的较新版本以及源目录中不在目标目录中的较新文件,应该是这样

我的prototype 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

我尝试过不同的任务,但我无法让任何东西正常工作

有什么建议吗?

替换以下内容:

<property name="do.something.else" value="true"/>

为此:

<uptodate targetfile="foo.iso" property="do.something.else">
    <srcfiles dir="${obj.dir}"/>
</uptodate>


如果目标存在且比源更新,则设置属性。

为了澄清,以下内容始终返回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中


我还尝试过用“regex”替换“glob”,但似乎也不起作用。

我尝试过各种任务,但我没有什么工作要做。我想我可以使用and来检查哪些源文件比等效的目标文件更新,但我无法让它工作。我知道单个targetfile属性是有效的,但尽管本例重点关注创建ISO,但在能够构建目标文件和源文件之间具有依赖关系的ISO之后,我还有其他事情要做。所以,你真的想用它来比较源和目标。也许你可以用一个更具代表性的例子来更新你的问题?我想也许能帮你,但我不完全明白你需要什么。