我有一个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系列暴露给一个属性(您指定其名称)。这可能会有一些好处。