我可以将Ant复制任务特定于操作系统吗?

时间:2008-09-17 19:11:39

标签: ant copy

我有一个Ant脚本,使用'copy' task执行复制操作。它是为Windows编写的,并且有一个硬编码的C:\ path作为'todir'参数。我看到'exec'任务有一个操作系统参数,有没有类似的方法来分支基于操作系统的副本?

6 个答案:

答案 0 :(得分:31)

我建议将路径放在属性中,然后根据当前操作系统有条件地设置属性。

<condition property="foo.path" value="C:\Foo\Dir">
   <os family="windows"/>
</condition>
<condition property="foo.path" value="/home/foo/dir">
   <os family="unix"/>
</condition>

<fail unless="foo.path">No foo.path set for this OS!</fail>

作为附带好处,一旦它在属性中,您可以覆盖它而无需编辑Ant脚本。

答案 1 :(得分:6)

以前发布的OS特定变量的建议可以使用,但很多时候你可以简单地省略“C:”前缀并使用正斜杠(Unix风格)文件路径,它可以在Windows和Unix系统上运行。 / p>

因此,如果你想在Windows上将文件复制到“C:/ tmp”,在Unix上复制“/ tmp”,你可以使用类似的东西:

<copy todir="/tmp" overwrite="true" >
         <fileset dir="${lib.dir}">
             <include name="*.jar" />
         </fileset>
</copy>

如果您确实需要/需要根据操作系统设置条件路径,可将其简化为:

    <condition property="root.drive" value="C:/" else="/">
        <os family="windows" />
    </condition>
    <copy todir="${root.drive}tmp" overwrite="true" >
             <fileset dir="${lib.dir}">
                 <include name="*.jar" />
             </fileset>
    </copy>

答案 2 :(得分:2)

您可以使用条件任务分支到不同的复制任务......来自蚂蚁手册:

<condition property="isMacOsButNotMacOsX">
<and>
  <os family="mac"/>

  <not>
    <os family="unix"/>

  </not>
</and>

答案 3 :(得分:1)

您不能使用变量并根据类型分配它?您可以将其放在build.properties文件中。或者您可以使用condition分配它。

答案 4 :(得分:1)

声明一个变量,它是您的操作的根文件夹。使用该变量为文件夹添加前缀,包括在复制任务中。

使用条件基于OS设置变量,或将其作为参数传递给Ant脚本。

答案 5 :(得分:0)

Ant-contrib有&lt; osfamily /&gt;任务。这会将os的族暴露给属性(指定名称)。这可能会带来一些好处。