ANT:按优先级顺序复制具有相同文件的多个文件集的内容

ANT:按优先级顺序复制具有相同文件的多个文件集的内容,ant,build-process,build,Ant,Build Process,Build,我正在尝试构建一个web应用程序,它从多个位置获取其类文件。这些位置可以包含相同的类文件。我需要能够指定优先级,以便在跨多个位置复制类时,某些位置优先于其他位置 我们有单独的ant脚本来构建WAR文件。这个构建是为了在我开发时在任何更改的类中进行热交换。所以这个构建必须很快 例如,我的两个班级地点是: /垃圾箱 /构建/类 我希望将这两个目录中的类复制到: /web/web-INF/classes 但是,如果这两个位置包含相同的类文件,例如: /bin/com/ben/Test.class

我正在尝试构建一个web应用程序,它从多个位置获取其类文件。这些位置可以包含相同的类文件。我需要能够指定优先级,以便在跨多个位置复制类时,某些位置优先于其他位置

我们有单独的ant脚本来构建WAR文件。这个构建是为了在我开发时在任何更改的类中进行热交换。所以这个构建必须很快

例如,我的两个班级地点是:

  • /垃圾箱
  • /构建/类
我希望将这两个目录中的类复制到: /web/web-INF/classes

但是,如果这两个位置包含相同的类文件,例如:

  • /bin/com/ben/Test.class
  • /build/classes/com/ben/Test.class
我希望/bin中的文件始终具有优先权

因此,在示例中:

  • 将复制文件:/bin/com/ben/Test.class
  • 文件:/build/classes/com/ben/Test.class将被忽略
我当前的脚本如下所示:

<sync todir="${deploy}/WEB-INF/classes" verbose="true">
    <fileset dir="bin"/>
    <fileset dir="build/classes"/>
</sync>

这是可行的,但每次运行脚本时,都会删除悬空文件。我也不确定这里是否保证有任何优先权


任何帮助都将不胜感激。

通过删除悬空文件,您是指已经在“${deploy}/WEB-INF/classes”目录中的文件吗

Sync将清除目标目录中的现有文件,如果您不希望发生这种情况,我建议改用copy

对于具有更高优先级的文件夹,您可以复制多次并覆盖现有文件

  <copy todir="${deploy}/WEB-INF/classes" verbose="true">
    <fileset dir="build/classes"/>
  </copy>

  <copy todir="${deploy}/WEB-INF/classes" verbose="true"  overwrite="true">
    <fileset dir="bin"/>
  </copy>


现在,test.class将从build/classes中复制,然后由bin中的test.class覆盖。

我觉得这是一个非常糟糕的主意,因为如果您有问题,他们将花费大量时间来发现。但如果你真的想这么做,这里有一个可能的解决方案

<war [...] duplicate="preserve">
    [...]
    <classes dir="bin"/>
    <classes dir="build/classes"/>
</war>

[...]

谢谢,斯派克,我试图避免复制重复文件两次以上。虽然这对速度来说可能不太重要。谢谢弗拉基米尔。我猜战争任务每次运行时都会运行整个包?我应该在问题文本中提到,此构建的目的是作为热交换任务,将更改的文件交换到构建中。因此,构建速度必须很快。我要试试战争任务。