如何在雪豹上有条件地建立一个蚂蚁目标

时间:2011-02-10 01:59:10

标签: ant osx-snow-leopard

我有一个跨平台的应用程序,我们使用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,我想我可以将其余部分计算出来。

2 个答案:

答案 0 :(得分:6)

您可以使用condition taskos值得注意的可用条件为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>
...