19

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

4

6 回答 6

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 脚本的情况下覆盖它。

于 2008-09-17T19:21:47.490 回答
6

之前发布的操作系统特定变量的建议将起作用,但很多时候您可以简单地省略“C:”前缀并使用正斜杠(Unix 样式)文件路径,它适用于 Windows 和 Unix 系统。

所以,如果你想将文件复制到 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>
于 2008-09-24T12:56:21.077 回答
2

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

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

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

  </not>
</and>

于 2008-09-17T19:18:49.807 回答
1

您不能使用变量并根据类型分配它吗?你可以把它放在一个build.properties文件里。或者您可以使用条件分配它。

于 2008-09-17T19:18:37.310 回答
1

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

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

于 2008-09-17T19:20:41.330 回答
0

Ant-contrib 有 <osfamily /> 任务。这会将操作系统的系列公开给一个属性(您指定的名称)。这可能会有一些好处。

于 2009-06-23T21:44:28.510 回答