当前位置:首页> 正文

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

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

Can I make the Ant copy task OS-specific?

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


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

1
2
3
4
5
6
7
8
<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脚本。


先前发布的有关特定于操作系统的变量的建议将起作用,但是很多时候,您可以简单地省略" C:"前缀并使用正斜杠(Unix样式)文件路径,并且在Windows和Unix系统上都可以使用。铅>

因此,如果要将文件复制到Windows上的" C:/ tmp"和Unix上的" / tmp",则可以使用以下命令:

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

如果您确实希望/需要基于OS设置条件路径,可以将其简化为:

1
2
3
4
5
6
7
8
    <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>

您可以使用条件任务分支到不同的复制任务...,请参阅ant手册:

1
2
3
4
5
6
7
8
9
<condition property="isMacOsButNotMacOsX">

  <os family="mac"/>

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

  </not>
</and>


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

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


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


Ant-contrib具有任务。这会将os系列暴露给一个属性(您指定其名称)。这可能会有一些好处。


展开全文阅读

相关内容