我可以使Ant复制任务特定于操作系统吗?
时间:2020-03-05 18:59:43 来源:igfitidea点击:
我有一个Ant脚本,可使用"复制"任务执行复制操作。它是为Windows编写的,具有硬编码的C:\路径作为'todir'参数。我看到'exec'任务有一个OS参数,是否有类似的方法可以基于OS分支副本?
解决方案
回答
我们不能使用变量并根据类型进行分配吗?我们可以将其放在" build.properties"文件中。或者,我们可以使用条件进行分配。
回答
我们可以使用条件任务分支到不同的复制任务...,请参阅ant手册:
<condition property="isMacOsButNotMacOsX"> <and> <os family="mac"/> <not> <os family="unix"/> </not> </and>
回答
声明一个变量,该变量是操作的根文件夹。使用该变量为文件夹添加前缀,包括在复制任务中。
使用条件,根据操作系统设置变量,或者将其作为参数传递给Ant脚本。
回答
我建议将路径放在属性中,然后根据当前操作系统有条件地设置属性。
<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脚本。
回答
先前发布的有关特定于OS的变量的建议将起作用,但是很多时候我们可以简单地省略" C:"前缀并使用正斜杠(Unix样式)文件路径,并且它在Windows和Unix系统上均可使用。
因此,如果要将文件复制到Windows上的" C:/ tmp"和Unix上的" / tmp",则可以使用以下方法:
<copy todir="/tmp" overwrite="true" > <fileset dir="${lib.dir}"> <include name="*.jar" /> </fileset> </copy>
如果我们确实希望/需要基于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>
回答
Ant-contrib具有<osfamily />任务。这会将os系列暴露给一个属性(我们指定其名称)。这可能会有一些好处。