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

tim*_*cus 19 ant copy

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

ben*_*ado 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>
Run Code Online (Sandbox Code Playgroud)

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


Mad*_*sen 6

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

因此,如果要在Windows上将文件复制到"C:/ tmp",在Unix上复制"/ tmp",则可以使用以下内容:

<copy todir="/tmp" overwrite="true" >
         <fileset dir="${lib.dir}">
             <include name="*.jar" />
         </fileset>
</copy>
Run Code Online (Sandbox Code Playgroud)

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

    <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>
Run Code Online (Sandbox Code Playgroud)