我有一个Ant脚本,使用'copy' task执行复制操作。它是为Windows编写的,并且有一个硬编码的C:\ path作为'todir'参数。我看到'exec'任务有一个操作系统参数,有没有类似的方法来分支基于操作系统的副本?
答案 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的族暴露给属性(指定名称)。这可能会带来一些好处。