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

时间:2009-03-23 00:14:58

标签: ant build-process build

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

我们有单独的ant脚本来构建WAR文件。在我开发的过程中,这个版本可以在任何变化的类中进行热交换。所以这个版本必须很快。

例如,我的两个班级位置是:

  • / bin中
  • /建造/类

我希望将这两个目录中的类复制到: /网络/ WEB-INF /类

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

  • /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>

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

任何帮助都将不胜感激。

2 个答案:

答案 0 :(得分:3)

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

同步将清除目标目录中的现有文件,如果您不希望这种情况发生,我会建议使用副本。

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

  <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覆盖。

答案 1 :(得分:1)

这听起来像是一个非常糟糕的主意,因为如果你遇到问题,发现它们会很费时间。但如果你真的想这样做,这是一个可能的解决方案

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