我有一个跨平台的应用程序,我们使用ant在不同的平台上构建不同的东西。现在出现了一个新的要求,如果在Snow Leopard或者后来的Leopard上进行构建,我需要采取不同的做法。
我查看了http://www.devdaily.com/blog/post/java/how-determine-operating-system-os-ant-build-script,其中显示了如何区分Windows和Macintosh等,而http://www.jajakarta.org/ant/ant-1.6.1/docs/en/manual/api/org/apache/tools/ant/taskdefs/condition/Os.html则显示了os的其他属性,例如${os.version}
。
我还没想到的是如何比较os.version
值,如果它是10.6或更高,那么雪豹的事情是什么。如果我可以在Snow Leopard上将变量snow_leopard
设置为1,我想我可以将其余部分计算出来。
答案 0 :(得分:6)
您可以使用condition
task。 os
值得注意的可用条件为here。
它的工作方式与'os family'相同:
<condition property="isSnowLeopard">
<os family="mac" version="10.6.6" />
</condition>
但这意味着您必须输入增量版本号 - 版本字符串必须完全匹配。
对于“更模糊”的替代方案,您可以使用matches
条件,这可能是
<condition property="isSnowLeopard">
<matches string="${os.version}" pattern="^10.6." />
</condition>
当OSX Lion出现时,您可能希望像这样扩展模式:
<condition property="isSnowLeopardOrGreater">
<matches string="${os.version}" pattern="^10.[67]." />
</condition>
或者单独检查10.7。
答案 1 :(得分:1)
使用<if>
提供的ant-contrib任务,您可以通过对操作系统版本进行等号检查来实现此目的。
...
<taskdef resource="net/sf/antcontrib/antcontrib.properties">
<classpath>
<pathelement location="/location/of/ant-contrib-1.0b3.jar"/>
</classpath>
</taskdef>
<target name="oscheck">
<property name="osver" value="${os.version}"/>
<if>
<equals arg1="${os.version}" arg2="6.1"/>
<then>
<echo message="Windows 7"/>
...
</then>
</if>
</target>
...